ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Node.js:如何解密php中加密的文本?

2019-10-31 10:31:31  阅读:383  来源: 互联网

标签:mcrypt node-js openssl cryptography 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.

标签:mcrypt,node-js,openssl,cryptography,php
来源: https://codeday.me/bug/20191031/1974922.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有