烦恼一般都是想太多了。

0%

RC4算法的C实现

RC4 算法是一个简单的实现,不过,对于算法数学是弱鸡的我,依然还不懂。

算法原理

  1. 一个 256 字节的状态向量 S,数据初始化为从0 —— 255。
  2. KSA(Key Scheduling Algorithm) 密钥调度算法。使用一个 1——256字节(8bit ——2048bits,典型的是 5 到 16 字节)的 K 来打乱 S-Box。 若 K 不够 256 字节,那么循环的形式进行。
  3. PRGA(Pseudo Random Generation Algorithm),使用打乱后的 S 来产生伪随机序列,这才是真正的密钥流。
  4. 逐字节将需要加密的数据与密钥流进行 XOR 操作,得出加密流。
  5. 加密流与密钥流再取异或操作,即得到数据。

S

unsigned char S[256];
for (int i=0; i < 256; i++) S[i] = i;

K

char K[] ='iamgod';;
int len = 6;

KSA

for (i = 0; i < 256; i++) {
j = (j + S[i] + K[i % len]) % 256;
int tmp = S[i];
S[i] = S[j];
S[j] = tmp;
}

PRGA

 int i;
unsigned long t1, t2;
unsigned var, out;
t1 = t2 =0;
for (i = 0; i < len; i++) {
t1 = (t1 + 1) % 256;
t2 = (t2 + S[t1]) % 256;
int tmp = S[t1];
S[t1] = S[t1];
S[t2] = tmp;
val = (S[t1] + S[t2]) % 256;
out = *buff ^ val;
*buff = out;
buff++;
}