在节点中加密,并在PHP 7中使用openssl解密

时间:2018-07-06 13:50:00

标签: php node.js encryption openssl cryptojs

我发现这篇文章如何在php中加密和在node中解密,它的工作原理是: Encrypt in PHP 7 decrypt in Node JS

但是我在相反的方向做同样的问题。

我尝试过这样:

节点:

const crypto = require('crypto');

const data = "data to encrypt";
const key = "315a5504d921f8327f73a356d2bbcbf1";
const iv = new Buffer(data.substring(0, 32), 'hex');

const cipher = crypto.createCipher('aes-256-cbc', key, iv);
let crypted = cipher.update(data, 'utf8', 'hex')
crypted += cipher.final('hex');
console.log(crypted);

PHP:

<?php
$encryptedMessage = '3aa3fc237aaf34a26482674cfcef1210';
$encryptionMethod = 'aes-256-cbc';
$secretHash = "315a5504d921f8327f73a356d2bbcbf1";

//To Decrypt
$iv_size = openssl_cipher_iv_length($encryptionMethod);
$iv = hex2bin(substr($encryptedMessage, 0, $iv_size * 2));

$decryptedMessage = openssl_decrypt(substr($encryptedMessage, $iv_size * 2), $encryptionMethod, $secretHash, 0, $iv);

echo "Decrypted: $decryptedMessage";

但是不起作用,是否知道如何进行这项工作?

1 个答案:

答案 0 :(得分:0)

IV应该是随机的,并且在加密和解密过程中都需要使用相同的IV。

您的初始化向量基于未加密的字符串,这是一个非常糟糕的主意,因为如果您将IV与加密的数据一起发送,则会泄漏部分未加密的数据。