【问题标题】:NodeJS Crypto with RC4 yields blank带有 RC4 的 NodeJS Crypto 产生空白
【发布时间】:2025-11-24 03:50:02
【问题描述】:

我有一个生成 RC4 加密字符串的 php 函数。我想使用 Node 解码该字符串 - 最好使用内置的 Crypto 模块。但我无法这样做 - 我只是得到一个空白字符串。

PHP 代码在这里http://code.google.com/p/rc4crypt/

我的JS代码是

crypto = require('crypto');
decipher = crypto.createDecipher("rc4", "MY SECRET KEY");
text = "HELLO";
decrypted = decipher.update(text, "utf8", "hex");
decrypted += decipher.final("hex");
console.log(decrypted);

我没有得到任何输出。我已经使用 openssl list-message-digest-algorithms 检查了我的 OpenSSL 实现是否具有 RC4

我使用的是 OSX 10.8,最新节点。

我愿意使用另一个模块来解密 - 我尝试了 cryptojs 模块,但没有弄清楚如何让它工作 - 当我尝试 RC4 时给了我错误。

谢谢

【问题讨论】:

    标签: javascript node.js cryptojs rc4-cipher node-crypto


    【解决方案1】:

    想通了

    第一个必须使用 crypto.createDecipheriv 否则密钥是 - 我相信 - md5 散列而不是使用 raw。

    其次,输入编码必须设置为二进制。

    第三 - 在我的情况下,我处理的是 POST 数据而不是硬编码的字符串,我不得不对其进行 urldecode - decodeURIComponent() jsut 窒息 - 但 unescape() 删除 + 符号做了诀窍:

    var text = unescape((response.post.myvar + '').replace(/\+/g, '%20'))
    
    var crypto = require('crypto');
    decipher = crypto.createDecipheriv("rc4", key, '');    
    decrypted = decipher.update(text, "binary", "utf8");
    decrypted += decipher.final("utf8");
    console.log(decrypted);
    

    【讨论】: