PHP   发布时间:2022-04-04  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Node.js:如何解密php中加密的文本?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

我的PHP密码如下所示:

<?
$salt = '…';
$data = '…';

$iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_CFB), MCRYPT_RAND);
$ciphered = trim(base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $salt, $data, MCRYPT_MODE_ECB,$iv)));

我试图破译上面的代码的结果:

ciphered = '…';
crypto = require('crypto');
salt = crypto.createHash('md5').update('…').digest('hex');
iv = '0123456789123455';
decipher = crypto.createDecipheriv('aes-256-cbc', salt, iv);
deciphered = decipher.update(ciphered, 'base64');
deciphered += decipher.final('utf-8');

代码导致:TypeError:DecipherFinal失败

解决方法:

我看到几个问题:

>操作模式不匹配.您在实际加密时为CFB(Cipher Feedback)操作模式生成IV,将ECB(Electronic Code Book-不推荐,请查看该Wiki文章中的图像以了解原因)作为您的模式,然后尝试使用CBC(Cipher Block Chaining)解密)模式.您应该坚持一种模式(可能是CBC).为此,请保留解密端aes-256-cbc并使加密端MCRYPT_MODE_CBC
>您将$salt(实际上是您的密钥)传递给mcrypt_encrypt而不对其进行散列,但对其进行散列,并在crypto.createDecipheriv要求每个its documentation二进制编码的字符串时返回一个十六进制字符串.两个密钥必须相同,并且需要遵循正确的编码,以便在传递给函数时它们保持不变.
>看起来您在加密侧生成了IV,然后在解密侧为IV使用了固定的字符串. IV(初始化向量)需要与密文一起传送到解密侧(并且可以与密文一起清晰地传输).
>根据its documentation,解密对象上的update方法不接受base64编码.您将需要将base64文本转换为其他内容(可能是二进制编码),然后以正确的编码将其传递到update方法中.
> PHP认字符集是ISO-8859-1,但是您试图将密文解密为UTF-8字符串.这可能会导致问题,尤其是如果您使用的字符超出了标准ASCII中使用的字符范围.您要么需要确保PHP端在UTF-8模式下运行(有关如何执行操作,请参见this SO answer),要么确保您的输入仅使用ASCII字符(ISO-8859-1是ASCII的超集),并且使用“ ascii”输出编码.

您的大多数问题都归结为编码问题.我对node.js上的各种编码类型了解不多,因此您需要自己研究,但是密码基元的问题应该很容易解决.请确保阅读我链接的文档以及mcrypt_encrypt documentation.

大佬总结

以上是大佬教程为你收集整理的Node.js:如何解密php中加密的文本?全部内容,希望文章能够帮你解决Node.js:如何解密php中加密的文本?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: