rc4加密算法c语言代码,RC4加密算法C语言实现.docx

页眉

页眉

PAGE

PAGE # / 6

RC4 加密算法 C 语言实现

代码文件名

RC4.cpp Encrypt.h (代码详见后文) 备注:将以上两个文件放在相同的路径(建议不要放在中文路径下)编译执行! 编译环境

Microsoft Visual C++ 6.0

C-Free 5.0

代码解释

RC4 加密算法是大名鼎鼎的 RSA 三人组中的头号人物 Ron Rivest 在 1987 年设计的密钥 长度可变的流加密算法簇。之所以称其为簇, 是由于其核心部分的 S-box 长度可为任意,但 一般为 256字节。该算法的速度可以达到 DES 加密的 10倍左右。

RC4 算法的原理很简单, 包括初始化算法和伪随机子密码生成算法两大部分。 假设 S-box 长度和密钥长度均为为n。先来看看算法的初始化部分(用类 C伪代码表示):

for (i=0; i

s=i;

j=0;

for (i=0; 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]);

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

#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);

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); // 解密,返回解密结果

char* ByteToHex(c onst un sig ned char* vByte, const int vLe n); //把字节码pbBuffer转为十六进

制字符串,方便传输

unsigned char* HexToByte(const char* szHex); //把十六进制字符串转为字节码pbBuffer,解

#e ndif // #ifndef _ENCRYPT_RC4_

以下为RC4.cpp文件代码

//

//版权信息

//

//

#in elude

#in elude

#i nclude

#in elude "En crypt.h".

const int max n=256+10;

char* En crypt(co nst char* szSource,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值