如何使用PHP mcrypt加密和使用节点加密解密
How to encrypt using PHP mcrypt and decrypt with node crypto
我有一些PHP代码,可以生成如下密文:
<?php
$data = '12345678123456781234567812345678123456781234567812345678123456781234567812345678';
$ciphertext = mcrypt_encrypt('rijndael-128', 'M02cnQ51Ji97vwT4', $data, 'ecb');
echo base64_encode($ciphertext);
?>
产品:
6tJ67oaF1X12X/FE4ahLdOrSeu6GhdV9dl/xROGoS3Tq0nruhoXVfXZf8UThqEt06tJ67oaF1X12X/FE4ahLdOrSeu6GhdV9dl/xROGoS3Q=
我知道ECB不是用于这种类型数据的最佳模式,但我不是加密它的人
我遇到的问题是节点加密试图解密。我的节点脚本如下:
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-erb",不需要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());
试试这个:
var crypto = require("crypto");
var data = "6tJ67oaF1X12X/FE4ahLdOrSeu6GhdV9dl/xROGoS3Tq0nruhoXVfXZf8UThqEt06tJ67oaF1X12X/FE4ahLdOrSeu6GhdV9dl/xROGoS3Q=";
var out = '';
var decipher = crypto.createDecipheriv("aes-256-ecb", "M02cnQ51Ji97vwT4", '');
out += decipher.update(data, "base64");
out += decipher.final();
console.log(out);
在我的情况下,将createDecipher(…)更改为createDecipheriv(注意末尾的iv)并使用空的第三个参数(所谓的初始化向量)就可以了。在这种情况下,请删除setAutoPadding(false)。
相关文章:
- 制作我自己的加密/解密系统
- 通过WebCryptoAPI而不是已浏览的节点加密模块在浏览器中生成ECDH密钥
- javascript->php加密解密-需要澄清和方法请
- 节点加密与加密-js 加密和解密之间的兼容性
- 节点JS加密:解密时密码错误
- JSON 数据加密/解密或密钥值对
- 节点.js RSA 加密/解密
- 如何使用PHP mcrypt加密和使用节点加密解密
- RNCryptor IOS+Javascript加密/解密AES 256
- Opengpg.js加密/解密示例
- 加密/解密应用程序's的代码和数据Phonegap
- 节点加密解密流抛出EVP_DecryptFinal_ex:错误的最终块长度,如果流将被中断
- 如何在Objective-C中使用OpenPGP.js加密/解密PGP消息
- 使用两个不同的密钥加密/解密
- 客户端和服务器端的Asp.net C#加密/解密
- 如何加密-解密Node.js加密aes256密码
- PHP和Javascript之间的加密/解密
- 节点加密破译最终失败
- 使用AES Crypto-JS加密解密在Android网络视图中不起作用
- Javascript和PHP加密/解密