JavaScriptを使用してPHP文字列の暗号化を複製しようとしています。ここではPHPのコードは次のとおりです。私はJavaScriptでそれを複製しようとすると、JavaScriptのDuplicate php openssl_encrypt
<?php
$iv = "123456789";
$key = "aaaaaaaaaaaaaaaa";
$input = "texttexttexttext";
$encrypted = openssl_encrypt($input, "AES-256-CBC", $key, 0, $iv);
echo $encrypted;
// "ZwY1i+vqP3acszeDiscCTx/R4a6d2AtkcInmN9OTCNE="
しかし、それは別の暗号文を与える:
var aesjs = require("aes-js");
var base64 = require("js-base64");
var iv = aesjs.utils.utf8.toBytes("123456789");
var key = aesjs.utils.utf8.toBytes("aaaaaaaaaaaaaaaa");
var text = aesjs.utils.utf8.toBytes("texttexttexttext");
var aesCbc = new aesjs.ModeOfOperation.cbc(key, iv);
var encryptedBytes = aesCbc.encrypt(text);
var b64encoded = base64.Base64.encode(encryptedBytes);
console.log(b64encoded);
// "MTcyLDIsNjAsMTU5LDcxLDEwLDE4Myw4LDE…wyMTIsMjIyLDk3LDEyNCw1MywxNzIsMjIy"
私はそれが同じ出力を与えるようにする方法について見当もつかない。何か案は?いくつかの物事がうまく行っている
'MTcyLDIsNjAsMTU5LDcxLDEwLDE4Myw4LDE ...'は '172,2,60,159,71,10,183,8,1 ...'にデコードします。 'base64.Base64.encode()'は 'encryptedBytes'の*文字列表現*をエンコードしているようです。 'console.log(encryptedBytes.toString( 'base64'));'を試したときの出力は? – dsprenkels
ちょっとしたアイデア:PHPでは明示的に256ビットのキーを使用しています。 aesjsでは、キーの長さはキー変数からのバイト数/ビット数によって決定されるようです - あなたの場合、256ではなく16 * 8 = 128ビットです。 – gus27