【问题标题】:Objective -C AES: 128 Bit, CBC, IV Encryption?目标 -C AES:128 位、CBC、IV 加密?
【发布时间】:2014-07-28 22:10:38
【问题描述】:

我正在构建一个 iOS 客户端,用于为 Shopify 的 Multipass 生成令牌:http://docs.shopify.com/api/tutorials/multipass-login

我们的 nodeJS 代码运行良好(使用库 https://github.com/beaucoo/multipassify),所以我将其用作参考。我发现NodeJS(208 字节)中生成的cipherText 的长度明显短于Objective-C(432 字节)的长度。这是执行 AES 128 位、CBC、IV 加密的函数:

NodeJS(正确)

multipassify.prototype.encrypt = function(plaintext) {
    // Use a random IV
    var iv = crypto.randomBytes(16);
    var cipher = crypto.createCipheriv('aes-128-cbc', this._encryptionKey,iv);

    // Use IV as first block of ciphertext
    var encrypted = iv.toString('binary') + cipher.update(plaintext, 'utf8', 'binary') + cipher.final('binary');
    return encrypted;
}

目标 C(不正确?)

- (NSData *)encryptCustomerDict:(NSMutableDictionary *)customerDict{
    NSData *customerData    = [NSKeyedArchiver archivedDataWithRootObject:customerDict];

    // Random initialization vector
    NSData *iv = [BBAES randomIV];

    //  AES: 128 bit key length, CBC mode of operation, random IV
    NSData *cipherText = [BBAES encryptedDataFromData:customerData
                                                      IV:iv
                                                     key:self.encryptionKey
                                                 options:BBAESEncryptionOptionsIncludeIV];

    return cipherText;
}

`

NodeJS 版本传入纯文本作为参数,这应该是 JSON 对象customerDict 的字符串化版本。理想情况下,两个函数返回的字节长度应该相同。我正在使用BBAES 库进行加密,不知道如何使用CommonCrypto 库来执行此操作。我是否正确实现了目标 C 函数?

【问题讨论】:

  • 这么多库的问题在于它们不提供兼容性,也没有完整记录内部工作原理,即原语的使用和组合方式。通过在 iOS/OSX 端使用 Common Crypto,至少可以清楚地知道正在做什么。

标签: objective-c encryption aes shopify


【解决方案1】:

首先我认为 BBAES 库会将结果转换为十六进制,但事实并非如此(我实际上检查了源代码)。

所以唯一合乎逻辑的推理似乎是输入是长度的两倍。例如,如果使用 UTF-16(或任何其他多字节字符编码)来加密文本,情况可能就是这样。

此外,我确实看到 BBAES 也将 IV 附加到密文中。与 NodeJS 相比,这一点以及可能的一些额外填充开销可能会使密文的大小超过两倍。

提示:查看函数的二进制输入十六进制,以确保没有差异!

【讨论】:

  • +1 查看十六进制!您必须查看十六进制才能看到问题,如果看不到问题,则无法解决问题(释义 Willy Jack)。
  • @Zaph +1 在哪里?你答应了(嗅):P
  • 糟糕,抱歉,我以为我点击了!
猜你喜欢
  • 2019-08-17
  • 2020-04-15
  • 2021-02-13
  • 2013-08-11
  • 2018-01-08
  • 2016-12-05
  • 2013-01-16
  • 2021-06-25
  • 1970-01-01
相关资源
最近更新 更多