天天看点

使用Openssl库对RC4进行程序设计

部分注释代码是来源于网络,为了方便大家对库函数的理解,在注释的下方添加上自己的代码用于代替注释

#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异或就是解密操作。

运行结果:

使用Openssl库对RC4进行程序设计

继续阅读