文档详情

基于C 的DES加密算法实现.doc

发布:2018-10-09约2.47万字共23页下载文档
文本预览下载声明
今天偶尔想到数据加密技术,刚才简单讨论了一下MD5和SHA,这里顺便提一下双向加密的标准DES。以前在一个宽带流媒体服务器项目中用到了DES加密,虽然使用环境相对单纯,但算法实现本身是具有普遍意义的。下述程序是很久以前在RSA公司的网站找到的,效率很高,稳定性较好,便一直在实践中使用。 首先在头文件中定义一个DES类: //des.h #ifndef __DES_H #define __DES_H class DES{ public: // Encrypt/decrypt the data in data, according to the key. // Caller is responsible for confirming the buffer size of data // points to is 8*blocks bytes. // The data encrypted/decrypted is stored in data. // The return code is 1:success, other:failed. int encrypt ( unsigned char key[8], unsigned char* data, int blocks = 1 ); int decrypt ( unsigned char key[8], unsigned char* data, int blocks = 1 ); // Encrypt/decrypt any size data,according to a special method. // Before calling yencrypt, copy data to a new buffer with size // calculated by extend. int yencrypt ( unsigned char key[8], unsigned char* data, int size ); int ydecrypt ( unsigned char key[8], unsigned char* in, int blocks, int* size = 0 ); int extend ( int size ) { return (size/8+1)*8; }; private: void des(unsigned char* in, unsigned char* out, int blocks); void des_block(unsigned char* in, unsigned char* out); private: unsigned long KnL[32]; enum Mode { ENCRYPT, DECRYPT }; void deskey(unsigned char key[8], Mode md); void usekey(unsigned long *); void cookey(unsigned long *); private: void scrunch(unsigned char *, unsigned long *); void unscrun(unsigned long *, unsigned char *); void desfunc(unsigned long *, unsigned long *); private: static unsigned char Df_Key[24]; static unsigned short bytebit[8]; static unsigned long bigbyte[24]; static unsigned char pc1[56]; static unsigned char totrot[16]; static unsigned char pc2[48]; static unsigned long SP1[64]; static unsigned long SP2[64]; static unsigned long SP3[64]; static unsigned long SP4[64]; static unsigned long SP5[64]; static unsigned long SP6[64]; static unsigned long SP7[64]; static unsigned long SP8[64]; }; #endif 而后,具体实现DES类: //des.cpp #include string.h #include Sinodes.h i
显示全部
相似文档