【问题标题】:crypt AES mode ECB in objective c and php [duplicate]在目标c和php中加密AES模式ECB [重复]
【发布时间】:2011-08-15 22:22:13
【问题描述】:

可能重复:
Why does this AES encryption on an iPad and decryption in PHP fail?

我使用objective c加密数据和php解密

这是我在目标 c 中的代码

NSString *log=[@"enfin on a terminé le projet de cette anné" AES256EncryptWithKey:key]; 
NSString *decr=[@"k6MDFVLV3UrxD63xc1gZBQ==" AES256DecryptWithKey:key]; 

这是我在 php 中的函数

$key = "1234567891234567";

$st = urldecode(trim(mcrypt_decrypt(MCRYPT_RIJNDAEL_128,$key, $tmp_st, MCRYPT_MODE_ECB, mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_ECB), MCRYPT_RAND))));
echo("<br>");
// decrypted data
echo "decryptage de (admin) de objective c : ". $st ;

现在一切正常,但是当我使用大字符串更多 18 个字符串时,此代码不起作用

【问题讨论】:

  • 我不知道你在问什么。
  • 请更新您的原始问题。谢谢。

标签: php objective-c


【解决方案1】:

假设这是我见过很多人复制的常见AES256EncryptWithKey:(例如here),它使用CBC,而不是ECB。不幸的是,它还将 IV 硬编码为 NULL

您的 PHP 代码似乎正在生成一个随机 IV,这对于加密是正确的(尽管 AES256EncryptWithKey: 不这样做),但对于解密是不正确的。

我不熟悉 mcrypt_decrypt 的语法,但您似乎正在向它传递一个 144 位密钥(18 个字节)。数据使用 256 位密钥加密。我看不到您在 ObjC 中使用的密钥。密钥不是密码(很遗憾,AES256EncryptWithKey: 将其视为密码)。

您可以查看Properly encrypting with AES with CommonCrypto 了解有关如何使用 CommonCrypto 的更多详细信息。正如我在文章中指出的那样“真正理解这段代码是个好主意,而不仅仅是复制它。”这对您的 PHP 解密逻辑也很重要。您应该确保您仔细阅读了mcrypt_decrypt 上的文档。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-25
    • 1970-01-01
    相关资源
    最近更新 更多