欢迎来到天天文库
浏览记录
ID:43442378
大小:36.50 KB
页数:6页
时间:2019-10-01
《RC4加密算法C语言实现》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、RC4加密算法C语言实现代码文件名RC4.cppEncrypt.h(代码详见后文)备注:将以上两个文件放在相同的路径(建议不要放在中文路径下)编译执行!编译环境MicrosoftVisualC++6.0C-Free5.0代码解释 RC4加密算法是大名鼎鼎的RSA三人组中的头号人物RonRivest在1987年设计的密钥长度可变的流加密算法簇。之所以称其为簇,是由于其核心部分的S-box长度可为任意,但一般为256字节。该算法的速度可以达到DES加密的10倍左右。 RC4算法的原理很简单,包括初始化算法
2、和伪随机子密码生成算法两大部分。假设S-box长度和密钥长度均为为n。先来看看算法的初始化部分(用类C伪代码表示): for(i=0;i3、: i=j=0; while(明文未结束) { ++i%=n; j=(j+s)%n; swap(s,s[j]); sub_k=s((s+s[j])%n); } 得到的子密码sub_k用以和明文进行xor运算,得到密文,解密过程也完全相同。RC4加密算法在C++中的实现:RC4函数(加密/解密):其实RC4只有加密,将密文再加密一次,就是解密了。GetKey函数:随机字符串产生器。ByteToHex函数:把字节码转为十六进制码,一个字节两个十六进制。十六进制字符串非常适合在HTTP中传输。4、HexToByte函数:把十六进制字符串,转为字节码。。Encrypt函数:把字符串经RC4加密后,再把密文转为十六进制字符串返回,可直接用于传输。Decrypt函数:直接密码十六进制字符串密文,再解密,返回字符串明文。源代码以下为Encrypt.h文件代码#ifndef_ENCRYPT_RC4_#define_ENCRYPT_RC4_#include#defineBOX_LEN256intGetKey(constunsignedchar*pass,intpass_len,unsign5、edchar*out);intRC4(constunsignedchar*data,intdata_len,constunsignedchar*key,intkey_len,unsignedchar*out,int*out_len);staticvoidswap_byte(unsignedchar*a,unsignedchar*b);char*Encrypt(constchar*szSource,constchar*szPassWord);//加密,返回加密结果char*Decrypt(constchar6、*szSource,constchar*szPassWord);//解密,返回解密结果char*ByteToHex(constunsignedchar*vByte,constintvLen);//把字节码pbBuffer转为十六进制字符串,方便传输unsignedchar*HexToByte(constchar*szHex);//把十六进制字符串转为字节码pbBuffer,解码#endif//#ifndef_ENCRYPT_RC4_以下为RC4.cpp文件代码///////////////////////7、/////////////////////////////////////////版权信息////////////////////////////////////////////////////////////////#include#include#include#include"Encrypt.h".constintmaxn=256+10;char*Encrypt(constchar*szSource,constchar*szPassWord)//8、加密,返回加密结果{if(szSource==NULL9、10、szPassWord==NULL)returnNULL;unsignedchar*ret=newunsignedchar[strlen(szSource)];intret_len=0;if(RC4((unsignedchar*)szSource,strlen(szSource),(unsignedchar*)szPassWord,strlen(szPassWord),r
3、: i=j=0; while(明文未结束) { ++i%=n; j=(j+s)%n; swap(s,s[j]); sub_k=s((s+s[j])%n); } 得到的子密码sub_k用以和明文进行xor运算,得到密文,解密过程也完全相同。RC4加密算法在C++中的实现:RC4函数(加密/解密):其实RC4只有加密,将密文再加密一次,就是解密了。GetKey函数:随机字符串产生器。ByteToHex函数:把字节码转为十六进制码,一个字节两个十六进制。十六进制字符串非常适合在HTTP中传输。
4、HexToByte函数:把十六进制字符串,转为字节码。。Encrypt函数:把字符串经RC4加密后,再把密文转为十六进制字符串返回,可直接用于传输。Decrypt函数:直接密码十六进制字符串密文,再解密,返回字符串明文。源代码以下为Encrypt.h文件代码#ifndef_ENCRYPT_RC4_#define_ENCRYPT_RC4_#include#defineBOX_LEN256intGetKey(constunsignedchar*pass,intpass_len,unsign
5、edchar*out);intRC4(constunsignedchar*data,intdata_len,constunsignedchar*key,intkey_len,unsignedchar*out,int*out_len);staticvoidswap_byte(unsignedchar*a,unsignedchar*b);char*Encrypt(constchar*szSource,constchar*szPassWord);//加密,返回加密结果char*Decrypt(constchar
6、*szSource,constchar*szPassWord);//解密,返回解密结果char*ByteToHex(constunsignedchar*vByte,constintvLen);//把字节码pbBuffer转为十六进制字符串,方便传输unsignedchar*HexToByte(constchar*szHex);//把十六进制字符串转为字节码pbBuffer,解码#endif//#ifndef_ENCRYPT_RC4_以下为RC4.cpp文件代码///////////////////////
7、/////////////////////////////////////////版权信息////////////////////////////////////////////////////////////////#include#include#include#include"Encrypt.h".constintmaxn=256+10;char*Encrypt(constchar*szSource,constchar*szPassWord)//
8、加密,返回加密结果{if(szSource==NULL
9、
10、szPassWord==NULL)returnNULL;unsignedchar*ret=newunsignedchar[strlen(szSource)];intret_len=0;if(RC4((unsignedchar*)szSource,strlen(szSource),(unsignedchar*)szPassWord,strlen(szPassWord),r
此文档下载收益归作者所有