0. 介紹
RC4是一種流密碼,但因為安全性問題已經被棄用。
1. 算法描述
1.1 初始化
Key為生成的隨機密鑰:1-256B
S為一數組:256B
T為輔助數組:keylen
B
for (int i = 0;i < 256;i++) {S[i] = i;T[i] = S[i % keylen];
}
1.2 初始化排列
通過下面的過程來,初始化排列S
int j = 0;
for (int i = 0;i < 256;i++) {j = (j + S[i] + key[i%key_len]) % 256;int tmp = S[i];S[i] = S[j];S[j] = tmp;
}
1.3 流生成
生成好排列后,就可以根據排列,重復生成key
進行加解密操作了。
int i = 0;
int j = 0;for (int k = 0;k < str_len; k++) {i = (i + 1) % 256;j = (j + S[i]) % 256;int tmp = S[i];S[i] = S[j];S[j] = tmp;int t = (S[i] + S[j]) % 256;str[k] ^= S[t];
}
3. 代碼
實現見ltnotfty-gitee
參考
william stallings
manojpandey-rc4