我需要使用 MySQL 的 AES_ENCRYPT 函数加密一个字符串,然后将该加密的字符串附加到 URL 的末尾,这样它就可以被另一端的 PHP 脚本解密和使用。
基本上,我正在加密字符串(使用 MySQL 的 AES_ENCRYPT),然后我使用 PHP 的 rawurlencode() 函数使其“URL 安全”。然后我将加密的字符串传递到一个 URL 中,然后由另一端的 PHP 脚本检索并成功解密……大约 95% 的时间。
似乎大约 5% 的字符串在加密过程中的某处被破坏,并且在通过 URL 传递后无法在另一端解码。有人可以帮我从这里出去吗?有没有 100% 万无一失的方法来做到这一点?我还尝试以不同的组合使用 urlencode() 和 base64_encode()。
谢谢。
最佳答案
已解决。
使用 MySQL 的 AES_ENCRYPT 函数加密字符串后,我使用 PHP 的 bin2hex() 函数将加密数据(二进制形式)转换为十六进制。然后我将十六进制作为字符串传递到 URL 的末尾。在另一端收到 URL 后,我便使用此自定义 PHP 函数将十六进制字符串恢复为二进制:
function hex2bin($data) {
$len = strlen($data);
return pack("H" . $len, $data);
}
从那里开始,剩下要做的就是使用 MySQL 的 AES_DECRYPT 函数和 wha-la 解密数据。成功恢复原字符串。
关于php - 使用 MySQL 的 AES_ECRYPT 函数加密一个值,然后使用 PHP 在 URL 字符串中传递它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3226057/