我目前正在进行加密和解密。我已使用https://medium.com/@amitasaurus/encrypting-decrypting-a-string-with-aes-js-1d9efa4d66d7如下所示加密了我的api密钥
var api_key = Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15);
var d = new Date();
var n = d.getTime();
var final_key = api_key+'/'+n;
var encrypted = CryptoJS.AES.encrypt('encryption', final_key);
var encrypted_key = encrypted.toString();
并将加密的密钥传递给服务器端。我用过
<?php
$key = pack("H*", "0123456789abcdef0123456789abcdef");
$iv = pack("H*", "abcdef9876543210abcdef9876543210");
$encrypted = base64_decode('U2FsdGVkX19gHSzwsrc5H9K6rqDYr2E8oYoVNSp8INU=');
$decrypt_string = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, $encrypted, MCRYPT_MODE_CBC, $iv);
echo $decrypt_string;
?>用于解密加密的字符串。当我打印解密的字符串时,就像这样����9Һ��دa
mcrypt
默认为零填充。这意味着,无论您使用哪种密文和密钥组合,都将填充将不会失败。相反,它仅返回无效的随机明文。
默认情况下,CryptoJS使用来自给定密码的OpenSSL密钥派生。只要您无法模仿CryptoJS生成的最终AES密钥值,您的解密操作就会返回随机的纯文本。
诸如GCM之类的现代模式包括带有密文的身份验证标签,以确保密文/密钥组合的有效性,否则将产生验证错误。请注意,直接用于传输模式安全性时,CBC模式绝对不安全。