解码包含空格的AES字符串

时间:2011-12-13 18:14:13

标签: php aes mcrypt encryption

在从iPhone应用程序接收URL时,我们正在解密在Objective-C中创建的字符串,并作为GET变量传递给我们的PHP网站。

我们正在解码:

mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $padded_key, base64_decode($base64encoded_ciphertext), 'ecb');

大多数情况下工作正常但有时,我们会收到一个包含空格的字符串,例如:

mypage.php?score=IEZrdQ5iUECe9 xyfTY5Cg==

然后解密失败,我们留下这样的结果:

the result http://mattbee.co.uk/temp/mess.png

有没有人知道如何处理空格中间的字符串,如果空格存在?我原本以为编码可能与它有关,但转换为UTF-8 / UTF-16并没有帮助。

任何建议都非常感谢。

3 个答案:

答案 0 :(得分:2)

Base64数据每64个字符包含空格,最后包含0-2个等号。所以iPhone应用程序应该在作为GET变量发送之前对其进行百分比编码。

答案 1 :(得分:2)

Base64可以表示任意字节,这正是密文所必需的。不要重新编码。

某些软件在base64编码的字符串中插入空格和换行符,因此它们适用于电子邮件和其他行长限制格式。解码时应忽略或删除它们。

如果base64编码的字符串中有空格,你可以在解码前删除它们,但我认为base64_decode应该自动执行此操作。

另一个注意事项:不要使用ECB模式,这是不安全的。使用CBC模式(随消息一起发送随机初始化向量)。或者甚至更好,不加密URL的部分,改为使用SSL(或TLS),它将为您处理所有细节。

答案 2 :(得分:0)

你可以使用bin2hex然后使用pack('H *',hex)来解码字符串。我用这种方法知道的唯一问题是字符串可以变得非常大。