使用 GET 时 Aes Decrypt 出错 - PHP
Aes Decrypt goes wrong when using GET - PHP
当我使用 GET 方法时,Aes Decrypt 出错。
resetPassword.php?em=/7tI2cvhU31O0v3Dr+YGtpgPaxKVB6InHeriyZhxyNk=
这是我发送到 php 文件的内容,如果我打印:$_GET['em']
该页面向我显示此输出:/7tI2cvhU31O0v3Dr+YGtpgPaxKVB6InHeriyZhxyNk=
没关系,
如果我像这样调用解密函数:fnDecrypt($_GET['em'], $AESPassword)
我得到这个输出:����H��M��.����;��&4o�r0��V`j∼��
如果我像这样调用解密函数:fnDecrypt("/7tI2cvhU31O0v3Dr+YGtpgPaxKVB6InHeriyZhxyNk=", $AESPassword)
我得到了正确的输出,所以谁能告诉我问题出在哪里?
我用于加密和解密的 AES 函数:
$iv = "d7e45c64ecb7c5eebdb9af404c0c9eff";
function fnEncrypt($sValue, $sSecretKey) {
global $iv;
return rtrim(
base64_encode(
mcrypt_encrypt(
MCRYPT_RIJNDAEL_256,
$sSecretKey, $sValue,
MCRYPT_MODE_CBC,$iv)),
"[=12=]");
}
function fnDecrypt($sValue, $sSecretKey) {
global $iv;
return rtrim(
mcrypt_decrypt(
MCRYPT_RIJNDAEL_256,
$sSecretKey, base64_decode($sValue),
MCRYPT_MODE_CBC, $iv),
"[=12=]");
}
我很确定你没有得到 URL 中的加号,因为它是 URL 中代表 space 字符的特殊字符(十六进制 20,12 月 32 日)。等号也有特殊的含义。
如果原始符号确实是加号,则解密失败,因为它是错误的代码。
您可能没有正确编码 URL。请注意,每个进入 URL 查询字符串的值,包括键和值,都必须经过 URL 编码。为此使用 urlencode()
或 rawurlencode()
。
另请注意,进入 HTML 的每个 URL 都必须进行 HTML 编码:htmlspecialchars()
.
还有两件事:我很确定你的加密现在已经被破解了,因为你发布了比你应该发布的更多关于你的加密方案的细节。
而且我确实想知道为什么在 URL 中重置密码时需要加密某些内容。
当我使用 GET 方法时,Aes Decrypt 出错。
resetPassword.php?em=/7tI2cvhU31O0v3Dr+YGtpgPaxKVB6InHeriyZhxyNk=
这是我发送到 php 文件的内容,如果我打印:$_GET['em']
该页面向我显示此输出:/7tI2cvhU31O0v3Dr+YGtpgPaxKVB6InHeriyZhxyNk=
没关系,
如果我像这样调用解密函数:fnDecrypt($_GET['em'], $AESPassword)
我得到这个输出:����H��M��.����;��&4o�r0��V`j∼��
如果我像这样调用解密函数:fnDecrypt("/7tI2cvhU31O0v3Dr+YGtpgPaxKVB6InHeriyZhxyNk=", $AESPassword)
我得到了正确的输出,所以谁能告诉我问题出在哪里?
我用于加密和解密的 AES 函数:
$iv = "d7e45c64ecb7c5eebdb9af404c0c9eff";
function fnEncrypt($sValue, $sSecretKey) {
global $iv;
return rtrim(
base64_encode(
mcrypt_encrypt(
MCRYPT_RIJNDAEL_256,
$sSecretKey, $sValue,
MCRYPT_MODE_CBC,$iv)),
"[=12=]");
}
function fnDecrypt($sValue, $sSecretKey) {
global $iv;
return rtrim(
mcrypt_decrypt(
MCRYPT_RIJNDAEL_256,
$sSecretKey, base64_decode($sValue),
MCRYPT_MODE_CBC, $iv),
"[=12=]");
}
我很确定你没有得到 URL 中的加号,因为它是 URL 中代表 space 字符的特殊字符(十六进制 20,12 月 32 日)。等号也有特殊的含义。
如果原始符号确实是加号,则解密失败,因为它是错误的代码。
您可能没有正确编码 URL。请注意,每个进入 URL 查询字符串的值,包括键和值,都必须经过 URL 编码。为此使用 urlencode()
或 rawurlencode()
。
另请注意,进入 HTML 的每个 URL 都必须进行 HTML 编码:htmlspecialchars()
.
还有两件事:我很确定你的加密现在已经被破解了,因为你发布了比你应该发布的更多关于你的加密方案的细节。
而且我确实想知道为什么在 URL 中重置密码时需要加密某些内容。