我想重複使用JavaScript的PHP字符串加密。這裏是PHP代碼:在JavaScript中重複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="
然而,當我試圖複製它在JavaScript中,它提供了不同的密文:
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時,密鑰長度似乎取決於密鑰變量的字節數/位數 - 在您的情況下,它是16 * 8 = 128位而不是256位。 – gus27