【发布时间】:2020-11-02 19:21:47
【问题描述】:
我需要使用 DES-EDE3 算法和一个密钥来加密一个字符串。在 php 中的工作代码是这样的:
$encrypted = OpenSSL_encrypt($plain, "DES-EDE3", $key, OPENSSL_RAW_DATA);
但我想要它用于节点 js 项目。所以我像这样重写了这段代码:
let cipher = crypto.createCipheriv("des-ede3", "the key", null);
let encryptedData = cipher.update("the data", "utf8", "base64") + cipher.final("base64");
let decodedData= Buffer.from(encryptedData , "base64").toString(); //cause i want it raw
但它给了我invalid key length 错误。我尝试了其他方法,例如使用 md5 散列密钥,但在这种情况下,它不会给我与 php 代码相同的字符串。
【问题讨论】:
-
您能否发布一些格式相似但与您的实际密钥不同的示例密钥?
-
@ArtjomB。关键是这样的:
�lS7�Q��%7��n�q��ݦ�G�这是一个 base64 解码的字符串,如下所示:9GxTN6pRqOGNJTfDwG4Q6HGD5d2m6keR从 api 给我。数据本身是价格和支付网关令牌以及使用;字符分隔的因子编号的组合。 -
@Artjom B. 要求密钥的原因是 OpenSsl 有时会使用密钥派生方法,而有时它会将太短(或太长)的密钥带到正确的长度。如果我们看不到 (sample) 键,我们就无法真正帮助您解决问题。如果您想得到一个好的和可靠的答案,请编辑您的问题并发布您的 PHP 加密代码的最小运行示例(简化明文,使用与真实密钥长度相同的密钥并将密文作为 hexstring 或 base64编码输出。谢谢
标签: php node.js encryption openssl cryptojs