部分注释代码是来源于网络,为了方便大家对库函数的理解,在注释的下方添加上自己的代码用于代替注释
#include <openssl/rc4.h>
#include <string.h>
#include <iostream>
using namespace std;
void TestRc4Encrypt()
{
char code[64] = { 0 };
int codelen = sizeof(code);
//memcpy_s(code, 64, "This is secrect", 15);
gets_s(code);
cout << "before encrypt :" << code << endl;
unsigned char *outbuffer = new unsigned char[codelen];
//用指定密钥对一段内存进行加密,结果放在outbuffer中
RC4_KEY rc4_key;
unsigned char* keystring = new unsigned char[64];
cout << "input key:";
cin >> keystring;
cout << "keystring:" << keystring << endl;
// 参数:(密钥对象,密钥数据的长度,密钥数据)
// RC4_set_key(&rc4_key, 7, (unsigned char *)"zenraoli");
RC4_set_key(&rc4_key, sizeof(keystring), keystring);
// 参数:密钥对象,数据长度,输入数据,输出数据
RC4(&rc4_key, codelen, (unsigned char *)code, outbuffer);
cout << "after encrypt :" << outbuffer << endl;
//用指定密钥对outbuffer中的密文进行解密,结果放回原来的内存
memset(code, 0, sizeof(code));
//RC4_set_key(&rc4_key, 7, (unsigned char *)"zenraoli");//这里必须再次设置密钥
RC4_set_key(&rc4_key, sizeof(keystring), keystring);
RC4(&rc4_key, codelen, outbuffer, (unsigned char *)code);
cout << "after decrypt :" << code << endl;
if (outbuffer)
{
delete[] outbuffer;
outbuffer = NULL;
}
}
int main(void)
{
TestRc4Encrypt();
getchar();
return 0;
}
RC4() 函数的功能主要是进行异或操作,因此第一次使用RC4是加密操作,第二次用RC4异或就是解密操作。
运行结果: