PHP iOS的AES加密

尝试使用AES加密在PHP和我的iOS应用程序之间进行通信时遇到了问题。

到目前为止,我已经考虑了两种实现方法。 第一个是使用OpenSSL。
在iOS端,我以一种模仿这里显示的代码的方式实现:http://saju.net.in/code/misc/openssl_aes.c.txt。

在PHP方面,我将生成的密钥和IV(来自iPhone)并将其用作PHP openssl加密的输入。

结果在输出方面有所不同...

我也考虑过:http://iphonedevelopment.blogspot.com/2009/02/strong-encryption-for-cocoa-cocoa-touch.html

但是这个SO帖子:iOS和PHP之间的AESCrypt解密让我震惊。

该项目与AES没有关系,它看起来像一个强大的加密算法,不会太难实施。

我的基本问题是:实现一个可以轻松用于iOS和PHP之间通信的好加密算法的最简单方法是什么?


正如评论中所述,对于您使用HTTPS可能最容易。

我曾经设置过一个iPhone应用程序,该应用程序必须通过HTTPS与PHP后端进行通信,并花了很多时间试图找出iPhone为什么不接受加密连接。

事实证明,它不起作用,因为我在服务器端使用自签名证书。 从证书颁发机构购买SSL证书解决了所有问题。

在没有公司或扩展验证的情况下验证单个域名的SSL证书非常便宜,所以我建议您尝试一下!


我刚刚完成了这个项目。 我使用了你在“也被认为是......”中引用的库

以下是一些使用php解密的示例代码:

$iv2 = '';
for($i=0;$i<16;$i++){
    $iv2 .= "";   
}
$plain_text_CBC = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, $encrypted_text, MCRYPT_MODE_CBC, $iv2);
var_dump($plain_text_CBC);

确保你的密钥都是256位(32个字符,我还没有任何编码问题,但如果你这样做,请记住你正在加密字节,而不是字符)。 请注意,MCRYPT_RIJNDAEL_128中的128是块大小,而不是密钥大小,而在AES256DecryptWithKey方法中,256是对密钥大小的引用,而块大小是128. AES256DecryptWithKey以CBC模式运行,但具有空初始化向量ⅳ)。

CBC意味着每个块取决于最后一个块,因此它使用一个预先设定的,通常是随机的“块-1”,称为IV

ECB意味着每个块都以相同的方式加密,因此它揭示了同一个消息中的两个块是相同的。 提到的图书馆没有使用它,所以我只是为了对比而提到它。

使用零iv(0000000000000000字节)被认为是不安全的。 要解决这个问题,你必须为IV创建一个NSData * iv变量,并修改NSData + AESCrypt.m的CCcrypt参数,为iv参数添加[iv bytes](我还没有测试过这个代码),而且你会需要存储这个iv并将它和你的消息一起传递给php。 但首先我会测试,并使一切工作与零iv。


作为一个直接示例,我的开源项目“Techno Tap”包含成功使用AES加密的PHP和iOS源代码,请随时在此处查看

iOS上的加密在ScoreboardManager.m中完成(使用NSData + AES),解密在Scoreboard.php的PHP端完成

链接地址: http://www.djcxy.com/p/56619.html

上一篇: PHP iOS AES Encryption

下一篇: C# to Python converter