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\[\],数组不同导致加解密的结果不同。

相关推荐
5G微创业4 小时前
Python / Node.js 调用短视频去水印 API 完整示例(含 SDK)
python·node.js·音视频·api·sdk·短视频
寒水馨5 小时前
macOS下载、安装electron-v43.2.0(附安装包electron-v43.2.0-darwin-arm64.zip)
javascript·macos·electron·node.js·跨平台·桌面应用开发·开源框架
hoLzwEge19 小时前
拯救低效调试!code-inspector-plugin 让代码定位如虎添翼
前端·前端框架·node.js
无情的西瓜皮1 天前
给 AI 装个“工具箱”:MCP 协议入门与 Node.js 实战
人工智能·node.js
__zRainy__1 天前
Node.js readline 全景指南:createInterface 配置、逐行读取与交互模式
node.js·readline
To_OC1 天前
拼路径读文件总踩坑?我把 Node 的 path 和 fs 彻彻底底捋了一遍
javascript·后端·node.js
星栈2 天前
从装一堆工具到看懂 Node 工程化思维:我的项目复盘记录
后端·node.js
东方小月2 天前
从零开发一个Coding Agent:monorepo项目搭建
前端·后端·node.js
Lihua奏2 天前
# 用 Node.js 连接数据库:一次请求是怎么跑起来的?
node.js
kisshyshy2 天前
给端侧大模型装上“发动机”:React 合成事件 + 进度条组件全解
前端·react.js·node.js