php - 使用php解密AES中的字符串
问题描述
我目前正在研究加密和解密。我已经使用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<��5*| աT�;��놻��V�[�}��ID-�}��硵� 有什么建议打印为解码字符串吗?
解决方案
mcrypt
默认为零填充。这意味着,无论您使用哪种密文和密钥组合,unpadding都不会失败。相反,它只是返回无效的随机明文。
CryptoJS 默认使用从给定密码派生的 OpenSSL 密钥。只要您不能模仿 CryptoJS 生成的最终 AES 密钥值,您的解密将返回随机明文。
GCM等现代模式在密文中包含一个身份验证标签,以确保密文/密钥组合的有效性,否则将产生验证错误。请注意,当直接用于传输模式安全时,CBC 模式绝对不安全。
推荐阅读
- android - Android - 如何更改位于 string.xml 中的字符串的一部分的颜色?
- nginx - 如何将 Nginx 配置为始终为所有匹配模式的位置提供一个静态文件?
- c++ - boost::multiprecision::cpp_int 被复制然后每次我尝试打印它时删除
- amazon-web-services - 未经授权从共享私有 AMI 运行 ec2 实例
- python - 通过等效调用将 C# SerialPort 应用程序移植到 Python 和 PySerial
- c++ - 将函数作为未知类型的类模板参数传递
- javascript - 使用 javascript 覆盖 css 文件的“on the fly” css 规则选择器
- c - 如何在C中将这些十六进制值转换为十进制
- sql-server - 插入到带有特定列值的选择中
所以我想知道是否有这样的事情:
insert into Table_History select *, CreationUser=getUser() from deleted;
我只覆盖/设置星号一列的值,而不必写出所有列并将 CreationUser 替换为 getUser()。
我不想把每一列都写成这样:
insert into Ta
- python - Python3 中间人:将套接字绑定到任何 IP