📄 myrc4.c
字号:
//
// RC4加密算法
// 主要用来演示算法过程,也可以用来实用,
// 但是速度约是OpenSSL中的RC4的1/5。
//
// 参照 中译本 Schneier《应用密码学》第二版 第282页
//
// by linfb@sdu.edu.cn
// 2004,3,2
//
#include "myrc4.h"
const char *RC4_options()
{
return 0;
}
void RC4_set_key(RC4_KEY *key, int len, const unsigned char *data)
{
int n;
unsigned char i=0, j=0, temp;
// 重复key以填满K[256]
for (n=0; n<=255; n++)
key->K[n] = data[n%len]; // % 运算较慢
// S[256]: 0,1,2,3,...,255
for (n=0; n<=255; n++)
key->S[n] = n;
// 把K混淆和扩散到S中
for (n=0; n<=255; n++)
{
i = n;
j += key->S[i]+key->K[i];
temp = key->S[i];
key->S[i] = key->S[j];
key->S[j] = temp;
}
// i,j
key->i = 0;
key->j = 0;
}
void RC4(RC4_KEY *key, unsigned long len, const unsigned char *indata,
unsigned char *outdata)
{
unsigned long l=0;
unsigned char i, j, k, temp;
i = key->i;
j = key->j;
while (l<len)
{
i++;
j += key->S[i];
temp = key->S[i];
key->S[i] = key->S[j];
key->S[j] = temp;
temp = key->S[i] + key->S[j];
k = key->S[temp];
outdata[l] = indata[l] ^ k;
l++;
}
key->i = i;
key->j = j;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -