node.js rc4加密/解密 不好用怎么办?
nodejs 15版本 以上,核心库就没有rc4加密了,三方库也各种问题,自己实现了一个方便今后使用。
加密解密都是这一个方法,RC4为对称加密,传入加密的内容就解密了,传入没加密的内容就自动加密了。
function rc4(data, key) {
if (typeof key != 'string') {
return null;
}
if (!Buffer.isBuffer(data)) {
if (typeof data == 'string') {
data = Buffer.from(data, 'utf-8');
} else {
return null;
}
}
key = Buffer.from(key);
var s = new Array(256);
var k = new Array(256);
var output = [];
var i, j, temp;
for (i = 0; i < 256; i++) {
s[i] = i;
k[i] = key[i % key.length];
}
for (i = j = 0; i < 256; i++) {
j = (j + s[i] + k[i]) % 256;
temp = s[i];
s[i] = s[j];
s[j] = temp;
}
i = j = 0;
for (var n = 0; n < data.length; n++) {
i = (i + 1) % 256;
j = (j + s[i]) % 256;
temp = s[i];
s[i] = s[j];
s[j] = temp;
output.push(data[n] ^ s[(s[i] + s[j]) % 256]);
}
return Buffer.from(output);
},
补充以下,如果发现加密和其他语言的不一样,可以看下传入的data key,他们本质上就是一个数组,但是文本转换数组的过程有很多,比如直接取字节码,直接到char[],数组不同导致加解密的结果不同。