我的一个应用程序需要下载一个数据库,该数据库具有用AES 256加密的内容。因此,我在服务器端phpAES上使用IV编码了AES CBC中的字符串。
在iOS方面,我正在使用FBEncryptor解密字符串。
这是服务器端的代码:
$aes = new AES($key, "CBC", $IV);
$crypt = $aes->encrypt($string);
$b64_crypt = base64_encode($crypt);
在iOS方面,我正在这样做:
NSString* decrypt = [FBEncryptorAES decryptBase64String:b64_crypt keyString:key iv:iv];
实际上,一切在iOS 8上都可以正常工作。问题出在iOS 7上,解码后的字符串被随机截断。
有什么想法吗?
不要使用phpAES。您正在用一门巨大的大炮射击自己的脚。
从他们的页面:
免费版仅支持ECB模式,可用于加密/解密信用卡号。
这是难以置信的错误和误导。ECB模式不适合用于任何目的,除非作为其他操作模式的基础。您需要一种AEAD模式;或者,如果失败,则使用HMAC-SHA2和CSPRNG衍生的IV / nonce进行CBC或CTR。使用未经身份验证的加密是一个非常糟糕的主意。
为了与iOS互操作,您应该使用libsodium。
如果您不能使用libsodium,那么最好的选择是OpenSSL,而不是mcrypt,这是iOS上的兼容接口。
所有当前支持的PHP版本(5.4+)都公开openssl_encrypt()
,openssl_decrypt()
并允许快速且安全的AES-CBC和AES-CTR加密。但是,您应该考虑使用为您实现这些功能的库,而不是自己编写它们。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句