我想重复使用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