我有两个脚本,都使用相同的算法用相同的密钥和IV加密字符串。但是结果是不同的。 openssl_encrypt是否仍使用与节点不同的填充方案,还是我缺少其他东西?
节点
const crypto = require('crypto');
var passphrase = '29486a7a37664140';
var iv = '76e69938cdf5bb64';
var text = '1234567890123456';
var cipher = crypto.createCipheriv('aes-128-ctr', passphrase, iv)
var crypted = cipher.update(text,'utf8','hex')
crypted += cipher.final('hex');
var result = crypted + ':' + iv;
console.log('crypted: (' + crypted.length + ' chars)', crypted);
// crypted: (32 chars) b94107e56900ec8270a847bbf457eaa6
的PHP
<?php
$encrypt_method = "AES-128-CTR";
$passphrase = '29486a7a37664140';
$iv = '76e69938cdf5bb64';
$text = '1234567890123456';
$encrypted = openssl_encrypt( $text, $encrypt_method, $passphrase, 0, $iv );
echo 'crypted (' . strlen($encrypted) . ' chars): ' . $encrypted;
// crypted (24 chars): uUEH5WkA7IJwqEe79Ffqpg==
?>
最佳答案
好吧,嗯……愚蠢。编码问题:
更改我的节点部分以使用bas64
var cipher = crypto.createCipheriv('aes-128-ctr', passphrase, iv)
var crypted = cipher.update(text,'utf8','base64')
crypted += cipher.final('base64');