我发现这篇文章如何在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";
但是不起作用,是否知道如何进行这项工作?
答案 0 :(得分:0)
IV应该是随机的,并且在加密和解密过程中都需要使用相同的IV。
您的初始化向量基于未加密的字符串,这是一个非常糟糕的主意,因为如果您将IV与加密的数据一起发送,则会泄漏部分未加密的数据。