php - 如何使用 PHP mcrypt 加密并使用 Node Crypto 解密

标签 php javascript node.js openssl mcrypt

我有一些 PHP 代码,可以生成一些密文,如下所示:

<?php
$data = '12345678123456781234567812345678123456781234567812345678123456781234567812345678';

$ciphertext = mcrypt_encrypt('rijndael-128', 'M02cnQ51Ji97vwT4', $data, 'ecb');

echo base64_encode($ciphertext);
?>

产品:

6tJ67oaF1X12X/FE4ahLdOrSeu6GhdV9dl/xROGoS3Tq0nruhoXVfXZf8UThqEt06tJ67oaF1X12X/FE4ahLdOrSeu6GhdV9dl/xROGoS3Q=

我知道 ECB 不是处理此类数据的最佳模式,但我不是对其进行加密的人。

我遇到的麻烦是 Node 加密试图解密它。我的 Node 脚本如下:

var crypto = require("crypto");    

var data = "6tJ67oaF1X12X/FE4ahLdOrSeu6GhdV9dl/xROGoS3Tq0nruhoXVfXZf8UThqEt06tJ67oaF1X12X/FE4ahLdOrSeu6GhdV9dl/xROGoS3Q=";

var out = '';

var decipher = crypto.createDecipher("aes-256-ecb", "M02cnQ51Ji97vwT4");

decipher.setAutoPadding(false); //this needs to be set otherwise i get an error:06065064:bad decrypt

out += decipher.update(data, "base64", "ascii");

out += decipher.final("ascii");

console.log(out);

产品:

"3i<1pzV7A

      vnE"3i<1pzV7A

                   vnE"3i<1pzV7A

                                vnE"3i<1pzV7A

                                             vnE"3i<1pzV7A

                                                          vnE

我不知道这里出了什么问题,原始数据的重复模式已恢复,但不正确。我在 openssl 中找不到等效的“rijndael-128”,似乎它必须是“aes-256-ecb”,并且不需要 IV,因为它是 ECB。我怎样才能让这两个库一起工作?

谢谢,J

最佳答案

https://github.com/tugrul/node-mcrypt

var mcrypt = require('mcrypt');

var bfEcb = new mcrypt.MCrypt('rijndael-128', 'ecb');
bfEcb.open('M02cnQ51Ji97vwT4');

var ciphertext = new Buffer('6tJ67oaF1X12X/FE4ahLdOrSeu6GhdV9dl/xROGoS3Tq0nruhoXVfXZf8UThqEt06tJ67oaF1X12X/FE4ahLdOrSeu6GhdV9dl/xROGoS3Q=', 'base64');
var plaintext = bfEcb.decrypt(ciphertext);
console.log(plaintext.toString());

关于php - 如何使用 PHP mcrypt 加密并使用 Node Crypto 解密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18176536/

相关文章:

node.js - AWS Lambda Node.js 全 ICU

javascript - 深度嵌套的 JS 闭包

php - 如何加密插入到 MySQL 表中的密码?

php - 从 MySQL 解析 JSON 字符串并将名称/值对插入 MySQL

php - 这是我的 php 代码,用于查看数据库中的多个图像。但我只能在前端看到一张图像。请帮助我

javascript - 以函数式风格重写循环

javascript - Ember 无法访问动态段参数

php - 如何在 Laravel 5.3 迁移中将小数列添加到现有表

javascript - 使用 AngularJS 和 ASP.NET Web API 上传/下载字节数组

node.js - axios response.data 奇怪的字符