3、: i=j=0; while(明文未結(jié)束) { ++i%=n; j=(j+s)%n; swap(s,s[j]); sub_k=s((s+s[j])%n); } 得到的子密碼sub_k用以和明文進(jìn)行xor運(yùn)算,得到密文,解密過程也完全相同。RC4加密算法在C++中的實(shí)現(xiàn):RC4函數(shù)(加密/解密):其實(shí)RC4只有加密,將密文再加密一次,就是解密了。GetKey函數(shù):隨機(jī)字符串產(chǎn)生器。ByteToHex函數(shù):把字節(jié)碼轉(zhuǎn)為十六進(jìn)制碼,一個(gè)字節(jié)兩個(gè)十六進(jìn)制。十六進(jìn)制字符串非常適合在HTTP中傳輸。
4、HexToByte函數(shù):把十六進(jìn)制字符串,轉(zhuǎn)為字節(jié)碼。。Encrypt函數(shù):把字符串經(jīng)RC4加密后,再把密文轉(zhuǎn)為十六進(jìn)制字符串返回,可直接用于傳輸。Decrypt函數(shù):直接密碼十六進(jìn)制字符串密文,再解密,返回字符串明文。源代碼以下為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);//加密,返回加密結(jié)果char*Decrypt(constchar
6、*szSource,constchar*szPassWord);//解密,返回解密結(jié)果char*ByteToHex(constunsignedchar*vByte,constintvLen);//把字節(jié)碼pbBuffer轉(zhuǎn)為十六進(jìn)制字符串,方便傳輸unsignedchar*HexToByte(constchar*szHex);//把十六進(jìn)制字符串轉(zhuǎn)為字節(jié)碼pbBuffer,解碼#endif//#ifndef_ENCRYPT_RC4_以下為RC4.cpp文件代碼///////////////////////
7、/////////////////////////////////////////版權(quán)信息////////////////////////////////////////////////////////////////#include#include#include#include"Encrypt.h".constintmaxn=256+10;char*Encrypt(constchar*szSource,constchar*szPassWord)//
8、加密,返回加密結(jié)果{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