当前位置:文档之家› RC4加密算法C语言实现

RC4加密算法C语言实现

sub_k=s((s+s[j])% n);
}
得到的子密码sub_k用以和明文进行xor运算,得到密文,解密过程也完全相同。
RC4加密算法在C++中的实现:
RC4函数(加密/解密):其实RC4只有加密,将密文再加密一次,就是解密了。
GetKey函数:随机字符串产生器。
ByteToHex函数:把字节码转为十六进制码,一个字节两个十六进制。十六进制字符串 非常适合在HTTP中传输。
HexToByte函数:把十六进制字符串,转为字节码。。
Encrypt函数:把字符串经RC4加密后,再把密文转为十六进制字符串返回,可直接用 于传输。
Decrypt函数:直接密码十六进制字符串密文,再解密,返回字符串明文。
源代码
以下为Encrypt.h文件代码
#ifndef _ENCRYPT_RC4_
#defi ne _ENCRYPT_RC4_
#in clude <stri ng.h>
#defi ne BOX_LEN 256
int GetKey(c onst un sig ned char* pass, int pass_le n, un sig ned char *out);
int RC4(c onst un sig ned char* data, int data_le n, const un sig ned char* key, int key_le n, un sig ned char* out, i nt* out_le n);
char* ByteToHex(c onst un sig ned char* vByte, const int vLe n); //把字节码pbBuffer转为十六进
制字符串,方便传输
unsigned char* HexToByte(const char* szHex); //把十六进制字符串转为字节码pbBuffer,解
{
if(szSource == NULL || szPassWord == NULL) retur n NULL;
un sig ned char* ret = new un sig ned char[strle n( szSource)];
int ret_le n = 0;
if(RC4((unsigned char*)szSource,

#e ndif//#ifndef _ENCRYPT_RC4_
以下为RC4.cpp文件代码
////////////////////////////////////////////////////////////
///Biblioteka 版权信息////////////////////////////////////////////////////////////////
RC4
代码文件名
RC4.cpp Encrypt.h(代码详见后文) 备注:将以上两个文件放在相同的路径(建议不要放在中文路径下)编译执行!编译环境
Microsoft Visual C++6.0
C-Free5.0
代码解释
RC4加密算法是大名鼎鼎的RSA三人组中的头号人物Ron Rivest在1987年设计的密钥长度可变的流加密算法簇。之所以称其为簇, 是由于其核心部分的S-box长度可为任意,但 一般为256字节。该算法的速度可以达到DES加密的10倍左右。
return NULL;
un sig ned char* src = HexToByte(szSource);
un sig ned char* ret = new un sig ned char[strle n( szSource)/2+1];
int ret_le n = 0;
static void swap_byte( un sig ned char* a, un sig ned char* b);
char* En crypt(co nst char* szSource, const char* szPassWord); //加密,返回加密结果
char* Decrypt(co nst char* szSource, con st char* szPassWord); //解密,返回解密结果
#in elude <iostream>
#in elude <stri ng>
#i nclude <stdio.h>
#in elude "En crypt.h".
const int max n=256+10;
char* En crypt(co nst char* szSource, const char* szPassWord) //加密,返回加密结果
strle n( szSource),
(un sig ned char*)szPassWord,
strle n( szPassWord),
ret,
&ret_le n) == NULL)
return NULL;
char* ret2 = ByteToHex(ret, ret_le n);
delete[] ret;
return ret2;
}
char* Decrypt(co nst char* szSource, con st char* szPassWord) //解密,返回解密结果
{
if(szSource == NULL || (strle n(szSource)%2 != 0) || szPassWord == NULL)
RC4算法的原理很简单, 包括初始化算法和伪随机子密码生成算法两大部分。 假设S-box长度和密钥长度均为为n。先来看看算法的初始化部分(用类C伪代码表示):
for (i=0; i<n; i++)
s=i;
j=0;
for (i=0; i<n; i++)
{
j=(j+s+k)%256;
swap(s, s[j]);
}
在初始化的过程中,密钥的主要功能是将S-box搅乱,i确保S-box的每个元素都得到
处理,j保证S-box的搅乱是随机的。而不同的S-box在经过伪随机子密码生成算法的处理 后可以得到不同的子密钥序列,并且,该序列是随机的:
i=j=0;
while(明文未结束)
{
++i%=n;
j=(j+s)%n;
swap(s, s[j]);
相关主题