最近在做一个项目中遇上了这么一个问题:要求加密算法采用3-DES算法,密钥为192位(以3DES按ECB模式加密算法加密字符串)加密字符串。
由于本人第一次接触,也查看了前辈的思想,但是终不得要领,没办法搞定这个东西。请大家帮帮忙。
如能附源码或者指引地址,不胜感激!
由于本人第一次接触,也查看了前辈的思想,但是终不得要领,没办法搞定这个东西。请大家帮帮忙。
如能附源码或者指引地址,不胜感激!
解决方案 »
- 将字符串转化为科学计数法的数字
- 为什么我的vs2005在调试CDC有关的程序时,特别卡。好象有hook函数拦截一样
- 继承了一个CWND的类,并且在其中动态创建一个控件,为什么会没有反应
- 借世界狂热问:我想在C++编译出来的DLL中加入版本号,应该怎么设置.(就是右键点属性,然后可以看到版本号的那种)
- 在vc中如何使用ado连接foxpro 数据库?
- 关于国际信用卡的问题,请做共享软件的开发者进来指点??
- 如何用VC写并口控制?
- 在dll中如何创建一个非模态对话框,和建立一个CFileDialog?
- vs2010 动态插入菜单不显示
- 要想让一个程序开机启动的时候就有管理员权限,除了系统服务,还有那些方法?
- VC project setting中有一个设置支持多线程的选项,在哪里?
- 纠错!<<WINDOWS核心编程式>>!至顶如何?
就是192位
我以前就网上的一段经典DES算法的封装// Des.h: interface for the CDes class.
//
//////////////////////////////////////////////////////////////////////#if !defined(AFX_DES_H__8000CEF3_A45A_46F6_B2B3_F2094BDB09EB__INCLUDED_)
#define AFX_DES_H__8000CEF3_A45A_46F6_B2B3_F2094BDB09EB__INCLUDED_#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000#pragma warning(disable:4244)class CDes
{
public:
enum MODE { NoMode = -1, EN0, DE1};
enum LEVEL { NoLevel = -1, DES1, DES2, DES3};
MODE Mode;
LEVEL Level;
CDes();
virtual ~CDes(); CDes(LEVEL level, MODE mode, char* password);
void ResetDes(LEVEL level, MODE mode, char* password);
int DoDes(unsigned char *pInput, int nLenInput, unsigned char * &pOutput);protected:
//根据一个c字符串生成对应的密钥
void makekey(char *aptr /* c_str */, unsigned char *kptr /* unsigned char[8] */);
void make2key(char *aptr /* c_str */, unsigned char *kptr /* unsigned char[16] */);
void make3key(char *aptr /* c_str */, unsigned char *kptr /* unsigned char[24] */); //设定对象的密钥和加/解密模式
void deskey(const unsigned char *key /* hexkey[8] */, short edf/* MODE */);
void des2key(const unsigned char *key /* hexkey[16] */, short mode/* MODE */);
void des3key(const unsigned char *key /* hexkey[24] */, short mode/* MODE */); //用来做DES加密,分别是8位,16位,24位
void des(unsigned char *from /* from[8] */, unsigned char *into /* to[8] */);
void D2des(unsigned char *from /* from[16] */, unsigned char *into /* from[16] */);
void D3des(unsigned char *from /* from[24] */, unsigned char *into /* from[24] */);private:
//三个internal key
unsigned long KnL[32] ;
unsigned long KnR[32] ;
unsigned long Kn3[32] ; //固定不变的常量数据
const static unsigned char Df_Key[24];
const static unsigned short bytebit[8];
const static unsigned long bigbyte[24];
const static unsigned char pc1[56];
const static unsigned char totrot[16];
const static unsigned char pc2[48];
const static unsigned long SP1[64];
const static unsigned long SP2[64];
const static unsigned long SP3[64];
const static unsigned long SP4[64];
const static unsigned long SP5[64];
const static unsigned long SP6[64];
const static unsigned long SP7[64];
const static unsigned long SP8[64]; void scrunch(unsigned char *, unsigned long *);
void unscrun(unsigned long *, unsigned char *);
void desfunc(unsigned long *, unsigned long *);
void cookey(register unsigned long *raw1); //用来保存及恢复三个internal key的函数
void usekey(unsigned long *from /* cookedkey[32] */);
void use2key(unsigned long *from /* cookedkey[32] */);
void use3key(unsigned long *from /* cookedkey[32] */);
void cpkey(unsigned long *into /* cookedkey[32] */);
void cp2key(unsigned long *into /* cookedkey[32] */);
void cp3key(unsigned long *into /* cookedkey[32] */); //此函数只被makekey调用,用来根据缺省的16bit的key生成一个8bit的key
void Ddes(unsigned char *from /* from[8] */, unsigned char *into /* from[8] */);
};#endif // !defined(AFX_DES_H__8000CEF3_A45A_46F6_B2B3_F2094BDB09EB__INCLUDED_)
要的话请发mail到 [email protected]
我会发给你的