
在一些场合,常需要用到一些简单的加密算法,这里的RC4就可以说是最简单的一种。只要设置一个足够强的密码,就可以适用于一些非常简单的场合了。我是用来加密HTTP传送的数据的。
RC4函数(加密/解密) 其实,RC4只有加密,将密文再加密一次,就是解密了。
GetKey函数 随机字符串产生器,呵呵,为了方便,大多数加密算法都有一个随机密码产生器,我也就附带一个了。
ByteToHex函数 把字节码转为十六进制码,一个字节两个十六进制。研究发现,十六进制字符串非常适合在HTTP中传输,Base64中的某些字符会造成转义,挺麻烦的。
HexToByte函数 把十六进制字符串,转为字节码。服务器也按照十六进制字符串的形式把数据传回来,这里就可以解码啦。同时,使用十六进制字符串传输,避开了传输过程中多国语言的问题。
Encrypt函数 把字符串经RC4加密后,再把密文转为十六进制字符串返回,可直接用于传输。
Decrypt函数 直接密码十六进制字符串密文,再解密,返回字符串明文。
源码如下:
Encrypt.h文件:
| 以下是代码片段: #ifndef _ENCRYPT_RC4_ #include <afx.h> #define BOX_LEN 256 int GetKey(const PBYTE pass, UINT pass_len, PBYTE out); char* Encrypt(const char* szSource, const char* szPassWord); // 加密,返回加密结果 char* ByteToHex(const PBYTE vByte, const UINT vLen); // 把字节码pbBuffer转为十六进制字符串,方便传输 #endif // #ifndef _ENCRYPT_RC4_ |
Encrypt.cpp文件:
| 以下是代码片段:
char* Encrypt(const char* szSource, const char* szPassWord) // 加密,返回加密结果 char* Decrypt(const char* szSource, const char* szPassWord) // 解密,返回解密结果 int RC4(const PBYTE data, UINT data_len, const PBYTE key, UINT key_len, PBYTE out, PUINT out_len) PBYTE mBox = new BYTE[BOX_LEN]; UINT i=0; int GetKey(const PBYTE pass, UINT pass_len, PBYTE out) int i; for(i = 0; i < BOX_LEN; i++) int j = 0; static void swap_byte(PBYTE a, PBYTE b) // 把字节码转为十六进制码,一个字节两个十六进制,内部为字符串分配空间 // 把十六进制字符串,转为字节码,每两个十六进制字符作为一个字节 |
