我在尝试使用 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-cryption-for-cocoa-cocoa-touch.html
但是这个帖子:iOS 和 PHP 之间的 AESCrypt 解密阻止了我。
该项目并不依赖于 AES,它只是看起来是一个强大的加密算法,实现起来并不太难。
我的基本问题是:实现可轻松用于 iOS 和 PHP 之间通信的良好加密算法的最简单方法是什么?
我刚刚完成了同样的项目。我使用了您在“也考虑过......”中引用的库
下面是一些用 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 模式下运行,但具有空初始化向量(四)。
CBC 意味着每个块都依赖于最后一个块,因此它使用预设的(通常是随机的)“块 -1”,称为 IV
ECB 意味着每个块都以相同的方式加密,因此当同一消息中的两个块相同时它会显示出来。提到的库没有使用它,所以我提到它只是为了对比。
使用零 iv(0000000000000000 字节)被认为是不安全的。要解决此问题,您必须为 IV 创建一个 NSData *iv 变量,并修改 NSData+AESCrypt.m 的 CCcrypt 参数,为 iv 参数添加 [iv bytes] (我尚未测试此代码),您将需要存储这个 iv 并将其与您的消息一起传递给 php。但首先我会测试并让一切在零静脉注射下正常工作。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)