rc4 js实现
RC4 算法简介
RC4(Rivest Cipher 4)是一种流加密算法,由 Ron Rivest 在 1987 年设计。它广泛应用于 SSL/TLS 和 WEP 等协议中。RC4 的核心是通过密钥调度算法(KSA)和伪随机生成算法(PRGA)生成密钥流,与明文进行异或操作实现加密或解密。
RC4 的 JavaScript 实现
以下是一个完整的 RC4 算法的 JavaScript 实现,包含密钥调度和伪随机生成两部分:
function rc4(key, str) {
// 密钥调度算法(KSA)
var s = [];
for (var i = 0; i < 256; i++) {
s[i] = i;
}
var j = 0;
for (i = 0; i < 256; i++) {
j = (j + s[i] + key.charCodeAt(i % key.length)) % 256;
// 交换 s[i] 和 s[j]
var temp = s[i];
s[i] = s[j];
s[j] = temp;
}
// 伪随机生成算法(PRGA)
i = 0;
j = 0;
var result = '';
for (var k = 0; k < str.length; k++) {
i = (i + 1) % 256;
j = (j + s[i]) % 256;
// 交换 s[i] 和 s[j]
var temp = s[i];
s[i] = s[j];
s[j] = temp;
// 生成密钥流并异或
var charCode = str.charCodeAt(k) ^ s[(s[i] + s[j]) % 256];
result += String.fromCharCode(charCode);
}
return result;
}
使用方法
RC4 是对称加密算法,加密和解密使用相同的函数:
var key = 'secret-key';
var plaintext = 'Hello, RC4!';
// 加密
var ciphertext = rc4(key, plaintext);
console.log('Encrypted:', ciphertext);
// 解密
var decrypted = rc4(key, ciphertext);
console.log('Decrypted:', decrypted);
注意事项
- RC4 密钥长度通常为 40-2048 位,但建议使用至少 128 位(16 字节)的密钥以提高安全性。
- RC4 在现代密码学中已被认为不安全,不推荐用于高安全性场景。
- 对于非 ASCII 字符(如中文),需确保字符串编码一致,或使用 Base64 编码处理二进制数据。
Base64 编码支持
如果需要处理二进制数据或非 ASCII 字符,可以结合 Base64 编码:
function rc4Base64(key, str, isEncrypt) {
if (isEncrypt) {
var encrypted = rc4(key, str);
return btoa(encrypted);
} else {
var decoded = atob(str);
return rc4(key, decoded);
}
}






