【问题标题】:Decoding AES Strings containing spaces解码包含空格的 AES 字符串
【发布时间】:2012-01-19 14:43:26
【问题描述】:

在从 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 并没有帮助。

非常感谢任何建议。

【问题讨论】:

    标签: php aes mcrypt encryption


    【解决方案1】:

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

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

    如果base64编码的字符串中有空格,你可以在解码之前把它们去掉,虽然我认为base64_decode应该自动做到这一点。

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2019-04-03
          • 2013-06-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多