我有一个PHP脚本为给定的字符串创建AES-256-CBF8加密。 我想为javascript中的相同加密创建等效代码。 我用同样的CryptoJS。但我的加密代码的JavaScript和PHP都不同。如何在javascript中创建aes-256加密
我已经试过这样:
PHP:
$secret_key = 'qIthpcluB8xA4Y0CGS7ahl3kfluBay7p';
$secret_iv = '99FF8B0332880F69D14110316D640AFFA8F422311C1576AF055A00498A88EEE80D337FBB1E4B8081A0901E9A1750806B2B371E7438AB968E4C1C8D3EF05A81ED';
$output = false;
$encrypt_method = "AES-256-CFB8";
$key = hash('sha256', $secret_key);
$iv = substr(hash('sha256', $secret_iv), 0, 16);
if($action == 'enc')
{
$output = base64_encode(openssl_encrypt($string, $encrypt_method, $key, 0, $iv));
}
else if($action == 'dec')
{
$output = openssl_decrypt(base64_decode($string), $encrypt_method, $key, 0, $iv);
}
else
{
return false;
}
return $output;
的JavaScript:
var message = '{"Request":"login","Username":"123456","API_AccessKey":"b57a4d91965d456","GMT_Timestamp":"101439"}';
var key = CryptoJS.SHA256("qIthpcluB8xA4Y0CGS7ahl3kfluBay7p"); //length=22
console.log(key);
var iv1 = CryptoJS.SHA256("99FF8B0332880F69D14110316D640AFFA8F422311C1576AF055A00498A88EEE80D337FBB1E4B8081A0901E9A1750806B2B371E7438AB968E4C1C8D3EF05A81ED"); //length=22
var iv = iv1.toString().substring(0,16);
var key1 = key.toString();
console.log(iv);
console.log(key);
//iv.substring(0,16);
//iv is now 987185c4436764b6e27a72f2fffffffd, length=32
var cipherData = CryptoJS.AES.encrypt(message, key1, { iv: iv },{mode: CryptoJS.mode.CFB8});
console.log(cipherData.toString());
//var cipherData="NUUyUDZPVGFLUzVCSUZpRUR3S28vN3dwY2ZLbjVTeDRDc25aTUdmS2pYc3VlTFBFWEpxVFVENmRIV1BCTUdxQXo4UHpOdTlqK2lqcXVNWlBZdTQvTlFlSW5CZnI5UHdiQ1ovNEhCUHU2KytyT3dyOCtrLzBmQT09";
var data = CryptoJS.AES.decrypt(cipherData.toString(), key1, { iv: iv },{mode: CryptoJS.mode.CFB});
console.log(data);
var NewCipher = CryptoJS.enc.Utf8.parse(cipherData);
document.getElementById("demo0").innerHTML = message;
document.getElementById("demo1").innerHTML = CryptoJS.enc.Base64.stringify(NewCipher);
document.getElementById("demo2").innerHTML = data;
//document.getElementById("demo3").innerHTML = CryptoJS.enc.Base64(data.toString(CryptoJS.enc.Utf8));
document.getElementById("demo3").innerHTML = data.toString(CryptoJS.enc.Utf8);
请帮我在这。
不要打扰,使用SSL证书 – user2182349
@ user2182349我倒没到加密,你能解释一下为什么我需要SSL?我只想要一种可以用另一种语言开发的通用加密方法 – Rajan
JavaScript全部在客户端。它可以被读取,加密可以被所有网站访问者检查。使用SSL证书将在数据从客户端发送到服务器时正确保护数据。加密非常复杂,您应该使用现有的解决方案,而不是编写自己的解决方案。 – user2182349