AES 256和Base64加密的字符串在iOS 8上有效,但在iOS 7上被截断

路卡

我的一个应用程序需要下载一个数据库,该数据库具有用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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

约束在iOS 8上有效,但在iOS 7上无效

CurrentItem在iOS上无效,但在Android上有效

创建GIF在iOS7上有效,在iOS8上中断

为什么反应本机边界半径在iOS上有效但在Android Image上无效

refs在iOS上有效,但在Android上未定义-React Native

Java Crypto AES / GCM / NoPadding在Windows上有效,但在Docker上无效(AEADBadTagException)

Java Crypto AES / GCM / NoPadding在Windows上有效,但在Docker上无效(AEADBadTagException)

topViewController错误(iOS7-在iOS8上有效)

在 Firefox 和 Opera 上没有声音,但在 Chrome 上有效

将输入限制为仅某些字符在Chrome上有效,但在Firefox上无效

水平滚动在IE11上有效,但在Chrome和Firefox上无效

iCloud 同步在 iPhone 和 Mac 上有效,但在 iPad 上无效

Bootstrap延伸链接在Chrome和Edge上损坏,但在Firefox上有效

Golang,使用AES和Base64加密字符串

使用RNCryptor解密base64编码和AES加密的字符串

在iOS7中从loadView()引用的@IBOutlet的Swift展开错误,但在iOS8中有效

gl纹理采样器在iOS上始终返回vec4(0.,0.,0.,1。)(但在OSX / Android上有效)

AES256加密/解密错误+ IOS SDK 7

C#和SQL Server在字符串是否有效的Base64上存在分歧-正确吗?

在iOS中使用AES / CBC / PKCS7Padding 128位算法在Android中加密的解密字符串的问题

带有OpenSSL的AES(AES-CBC-256)加密/解密预期输出被截断

PWA-文件下载在Android上有效,在IOS上无效

用字符串中的正斜杠替换反斜杠(std :: replace在Windows上有效,但在Linux上不适用)

C#AES Base64加密(基于字符串)

解密AES加密的base64字符串

图形在Chrome上有效,但在Firefox上无效

DelegatingHandler在Localhost上有效,但在Azure上无效

Linux上具有AES-256加密的7-zip文件

AES ECB iOS加密