【问题标题】:Encryption Decryption AES/ECB/NoPadding加密解密AES/ECB/NoPadding
【发布时间】:2016-09-02 14:54:50
【问题描述】:

是否有任何方法可以在 iOS 中按照此算法对字符串进行解密/解密? 我只知道在 java 中这个类:javax.crypto.Cipher 用于此目的

【问题讨论】:

  • 是的,有。
  • 切勿使用ECB mode。它是确定性的,因此在语义上不安全。您至少应该使用像CBCCTR 这样的随机模式。最好对您的密文进行身份验证,以免像padding oracle attack 这样的攻击是不可能的。这可以通过 GCM 或 EAX 等认证模式或encrypt-then-MAC 方案来完成。

标签: ios aes encryption-symmetric ecb


【解决方案1】:

Apple Common Crypto 确实支持 AES、ECB 模式(使用 CBC 模式)和无填充。如果不使用填充,则输入数据长度必须是 AES 块大小(16 字节)的精确倍数,标准填充为 PKCS#7(née PKCS#5)。

您最好使用支持安全加密的解决方案,例如支持多种语言和平台的RNCryptor

仅仅使用加密并不能提供安全性,它必须与其他加密原语一起正确使用。

【讨论】:

    【解决方案2】:

    Apple 的 Common Crpto 确实支持它。导入 CommonCryptor.h 和 CCCryptorStatus "CCCrypt" 就是你需要的。

    这是一个例子:

    + (NSData *)encryptDataWithAESECB:(NSData *)data
                                  key:(NSData *) key
                                error:(NSError **)error {
        size_t outLength;
    
        int cipherLen = (int)(data.length/kAlgorithmBlockSize + 1)*kAlgorithmBlockSize;
        NSMutableData *cipherData = [NSMutableData dataWithLength:cipherLen];
        NSData *newData = [self addPaddingBeforeEncryptWithAESECB:data];
    
        CCCryptorStatus result = CCCrypt(kCCEncrypt, // operation
                                         kAlgorithm, // Algorithm
                                         kCCOptionECBMode, // Mode
                                         key.bytes, // key
                                         key.length, // keylength
                                         0,// iv
                                         newData.bytes, // dataIn
                                         newData.length, // dataInLength,
                                         cipherData.mutableBytes, // dataOut
                                         cipherData.length, // dataOutAvailable
                                         &outLength); // dataOutMoved
        if (result == kCCSuccess) {
            cipherData.length = outLength;
        }else {
            if (error) {
                *error = [NSError errorWithDomain:kRNCryptManagerErrorDomain code:result userInfo:nil];
            }
            return nil;
        }
        return cipherData;
    }
    

    请参阅我的帖子以获取更多信息: AES ECB iOS Encrypt

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-01-20
      • 2019-11-01
      • 2021-03-05
      • 1970-01-01
      • 2021-12-30
      • 2015-03-11
      • 2021-09-24
      相关资源
      最近更新 更多