PHP mcrypt相同的键+ base64 + urlencode =不同的值

时间:2016-01-29 16:49:33

标签: php encryption base64 urlencode

我正在尝试使用mcrypt加密一个PHP站点上的值并在另一个PHP站点上解密它。有时它有效(如80%的时间),有时它不起作用。 现在我发现使用相同的密钥加密相同的值时加密的文本是不同的。这怎么可能? 我错过了什么?

以下是加密代码:

-v time

解密代码:

adb logcat -c

2 个答案:

答案 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, '-_~', '+/='));
}