PHP iOS的AESencryption

我一直在尝试使用AESencryption在PHP和我的iOS应用程序之间进行通信。

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

在PHP方面,我把生成的密钥和IV(来自iPhone)并将其用作PHP opensslencryption的input。

结果在输出方面不同

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

但是这个post: iOS和PHP之间的AESCrypt解密令我震惊 。

这个项目并不局限于AES,它似乎是一个强大的encryptionalgorithm,不会太难实施。

我的基本问题是:什么是最简单的方法来实现一个好的encryptionalgorithm,可以很容易地使用iOS和PHP之间的沟通?

正如在评论中所说,你可能最容易使用HTTPS。

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

事实certificate,这是行不通的,因为我在服务器端使用自签名证书。 从证书颁发机构购买SSL证书解决了所有问题。

validation一个单一的域名没有公司或扩展validationSSL证书真的很便宜,所以我build议你试试看!

我刚刚通过这种types的项目。 我使用了你在“也被认为是…”中引用的库

这里是一些用php解密的例子代码:

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

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

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

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

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

作为一个直接的例子,我的开源项目“Techno Tap”包含成功使用AESencryption的PHP和iOS源代码,请随时查看

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