我正在尝试使用mcrypt加密一个PHP站点上的值并在另一个PHP站点上解密它。有时它有效(如80%的时间),有时它不起作用。 现在我发现使用相同的密钥加密相同的值时加密的文本是不同的。这怎么可能? 我错过了什么?
以下是加密代码:
-v time
解密代码:
adb logcat -c
答案 0 :(得分:0)
我怀疑rawurlencode()和PHP完成的解码组合填充$ _REQUEST数组会破坏你的密文/ iv。
更新:我测试了您的代码,它在我的实现中按预期工作。也许在您的实现中,客户端正在修改编码文本。
答案 1 :(得分:0)
SOOOOO。
这个问题显然不是我在问题本身中提到的。 对不起。
Standalone这应该像@ChrisRibe一样在他的答案中测试。
在这个特殊情况下的问题 - 我在我的问题中没有提到 - 是,整个URL也是urlencoded,因为它作为PARAMETER传递到另一个url(即html2pdf.it服务器)。如果加密的base64编码文本中没有特殊的url保留字符,那么它是否有效 - 但是如果有任何url保留字符当然不起作用!
解决方案:
我没有使用rawurlencode作为base64编码的加密文本,而是使用我自己的函数替换导致url问题的3个符号,就像在这个stackoverflow问题中回答的那样: Passing base64 encoded strings in URL
function base64_url_encode($input) {
return strtr(base64_encode($input), '+/=', '-_~');
}
function base64_url_decode($input) {
return base64_decode(strtr($input, '-_~', '+/='));
}