• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

ios - 在 Objective C 中解密 AES-256-CBC

[复制链接]
菜鸟教程小白 发表于 2022-12-13 10:28:38 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我正在构建一个 iPhone 应用程序,它通过 JSON 从 PHP 后端获取解密的字符串。

在 PHP 中,我像这样加密字符串:

$encrypt_method = "AES-256-CBC";
    $secret_key = 'This is my secret key';
    $secret_iv = 'This is my secret iv';

    // hash
    $key = hash('sha256', $secret_key);

    // iv - encrypt method AES-256-CBC expects 16 bytes - else you will get a warning
    $iv = substr(hash('sha256', $secret_iv), 0, 16);

    if( $action == 'encrypt' ) {
        $output = openssl_encrypt($string, $encrypt_method, $key, 0, $iv);
        $output = base64_encode($output);
    }

在 Objective C 中,我尝试使用 BBEAS 解密此字符串:https://github.com/benoitsan/BBAES

这是我在 Objective C 中得到的代码:

   NSData* salt = [BBAES IVFromString"This is my secret iv"];

    NSData *key = [BBAES keyBySaltingPassword"This is my secret key" salt:salt keySize:BBAESKeySize256 numberOfIterations:BBAESPBKDF2DefaultIterationsCount];
 NSData *decryptedMessage = [BBAES decryptedDataFromString"RlVnd01XOE5teTNseDFGQ3JScVhkQT09" IV:salt key:key];
    NSLog(@"Decrypted message: %@", decryptedMessage);

日志现在只显示一个空对象。

我找到了 C# 的重复帖子:How to decrypt an AES-256-CBC encrypted string

编辑: 可以说我可以调整 PHP 中的编码。我应该如何加密 PHP 中的字符串以在 Objective C 中解密?



Best Answer-推荐答案


您在 PHP 中所做的事情与在 iOS 中不同。我不熟悉这个 BBAES 框架,但您似乎拥有一个密码,您使用 PBKDF key 派生从中生成 256 位 AES key ,并使用它来解密数据。 但是,在 PHP 中,您正在对密码进行哈希处理并使用它来加密您的数据,因此您可能使用不同的 AES key 进行加密和解密。我也不确定 IV 是否匹配。

你应该做的是:

在 PHP 中,为您执行的每次加密生成一个随机的 16 字节 IV,并使用 PBKDF key 派生从您的密码生成 256 位 AES key 。请记住,盐和迭代次数在 PHP 和 iOS 中必须相同。加密后,将IV附加到加密数据后发送。

在 iOS 中,从收到的密文(最后 16 个字节)中提取 IV,使用相同的盐和迭代次数之前的相同方式从密码生成 AES key ,然后解密数据(没有 16最后的字节IV)

编辑:

正如@Zaph 指出的那样,我忘了提到您也应该使用相同类型的填充。 BBAES 似乎使用 PKCS7 填充。

关于ios - 在 Objective C 中解密 AES-256-CBC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29427780/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap