【发布时间】:2021-04-15 10:47:46
【问题描述】:
我的后端有一个 simple_crypt 函数,它工作正常,现在我想要为 javascript 创建一个与 php 完全相同的函数。 所以我研究并得到了 CryptoJS 库,与 PHP 相比,我的“Key”和“iv”值是正确的,但是当我加密我的字符串时,输出完全不同。
这是我的工作 PHP 代码,我想将其转换为 javascript。
<?php
function simple_crypt( $string ) {
$secret_key = '1234567890';
$secret_iv = '0987654321';
$output = false;
$encrypt_method = "AES-256-CBC";
$key = hash( 'sha256', $secret_key );
$iv = substr( hash( 'sha256', $secret_iv ), 0, 16 );
echo "Key : ".$key."<br>";
echo "iv : ".$iv."<br>";
$output = openssl_encrypt( $string, $encrypt_method, $key, 0, $iv );
return $output;
}
$e = simple_crypt("text");
echo $e;
echo "<br>";
?>
这是我遇到问题的 JS 代码,请查看并告诉我此 js 代码哪里错了。
<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.0.0/crypto-js.min.js" integrity="sha512-nOQuvD9nKirvxDdvQ9OMqe2dgapbPB7vYAMrzJihw5m+aNcf0dX53m6YxM4LgA9u8e9eg9QX+/+mPu8kCNpV2A==" crossorigin="anonymous"></script>
<script type="text/javascript">
function simple_crypt(string) {
var secret_key, secret_iv, output, key, iv;
secret_key = '1234567890';
secret_iv = '0987654321';
output = false;
key = CryptoJS.SHA256(secret_key).toString();
iv = CryptoJS.SHA256(secret_iv).toString().substr(0, 16);
console.log("key",key);
console.log("iv",iv);
var encrypted = CryptoJS.AES.encrypt(string, key, {iv: iv});
return (encrypted.toString());
}
console.log(simple_crypt("text"));
</script>
这是输出:
PHP:T4F65n4AVlmkkb5LLFhRIQ==
JS:U2FsdGVkX18HJGpPYZPm6crBcxA7TfbZZ9Sc/4qHGBk=
【问题讨论】:
-
这里是 PHP 的输出:T4F65n4AVlmkkb5LLFhRIQ==
-
JS : U2FsdGVkX18HJGpPYZPm6crBcxA7TfbZZ9Sc/4qHGBk=
标签: javascript php encryption hash cryptojs