我一直在尝试使用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
但这篇文章:AESCrypt decryption between iOS and PHP让我望而却步。
该项目并不局限于AES,它只是看起来像是一种强大的加密算法,实现起来并不太难。
我的基本问题是:实现一个好的加密算法的最简单方法是什么,它可以很容易地用于iOS和PHP之间的通信?
发布于 2011-12-17 01:13:37
正如评论中所说,对你来说使用HTTPS可能是最简单的。
我曾经设置了一个iPhone应用程序,它必须通过HTTPS与PHP后端通信,我花了很多时间试图找出为什么iPhone不接受加密连接。
事实证明,它不起作用,因为我在服务器端使用了自签名证书。从证书颁发机构购买SSL证书解决了所有问题。
无需公司或扩展验证即可验证单个域名的SSL证书非常便宜,因此我建议您尝试一下!
发布于 2012-01-03 11:56:57
我刚刚完成了同样的项目。我使用了您在“还考虑...”中引用的库。
下面是一些用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个字符,我还没有遇到任何编码问题,但如果有,请记住您加密的是字节,而不是字符)。注意,在MCRYPT_RIJNDAEL_128中,128是块大小,而不是密钥大小,而在方法AES256DecryptWithKey中,256是对密钥大小的引用,而块大小是128。AES256DecryptWithKey在CBC模式下运行,但有一个空的初始化向量(iv)。
CBC意味着每个块都依赖于最后一个块,因此它使用一个预置的、通常是随机的“块-1”,称为IV
ECB意味着每个块都以相同的方式加密,因此当同一消息中的两个块相同时,ECB会显示出来。上面提到的库不使用它,所以我提到它只是为了对比一下。
使用零iv (0000000000000000字节)被认为是不安全的。要解决这个问题,你必须为IV创建一个NSData *iv变量,并修改NSData+AESCrypt.m的CCcrypt参数,为iv参数添加iv字节(我还没有测试这段代码),你需要存储这个iv,并将它与你的消息一起传递给php。但首先,我要测试一下,让所有的东西都能用零iv。
发布于 2015-12-28 20:12:58
作为一个直接的例子,我的开源项目"Techno Tap“包含了成功使用AES加密的PHP和iOS源代码,请随意查看here
iOS上的加密是在ScoreboardManager.m (使用NSData+AES)中完成的,而解密是在Scoreboard.php中的PHP端完成的
https://stackoverflow.com/questions/8438040
复制相似问题