【问题标题】:AES Descryption interopbility IOS and PythonAES 解密互​​操作性 IOS 和 Python
【发布时间】:2013-10-17 13:16:48
【问题描述】:

我正在尝试解密使用 AES 256 CFB 模式在 Python 中加密的文件。

当我尝试在 IOS 中解密它时,它无法解密。给一些垃圾字符串。

NSString * AES_Decrypt(NSString * key, NSString * cipherText,NSString *iv)
{
    @autoreleasepool {
    NSMutableData * mutableCipher = [[NSMutableData alloc] init];
    mutableCipher = (NSMutableData *)[cipherText dataUsingEncoding:NSUTF8StringEncoding];
    char  keyPtr[kCCKeySizeAES256+1];
    bzero( keyPtr, sizeof(keyPtr) );
    [key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSASCIIStringEncoding];
    uint8_t iv[kCCKeySizeAES128+1];
    bzero((void *) iv, (size_t) sizeof(iv));      
    size_t numBytesEncrypted = 0;     
    NSUInteger dataLength = [mutableCipher length];
    size_t bufferSize = dataLength + kCCKeySizeAES128;       
    void *buffer_decrypt = malloc(bufferSize);        
    NSMutableData * output_decrypt = [[NSMutableData alloc] init];        
    CCCryptorStatus result = CCCrypt(kCCDecrypt , kCCAlgorithmAES128, kCCModeCFB, keyPtr, kCCKeySizeAES128, iv, [mutableCipher mutableBytes] , [mutableCipher length], buffer_decrypt, bufferSize, &numBytesEncrypted);       
    output_decrypt = [NSMutableData dataWithBytesNoCopy:buffer_decrypt length:numBytesEncrypted];
    NSString * decryptedStr = [[NSString alloc] initWithData:output_decrypt encoding:NSASCIIStringEncoding];
    NSLog(@"Decrypted String is::%@",decryptedStr);
    if(result == kCCSuccess){
        return decryptedStr;
    }
    else{
        return NULL;
    }

}
return NULL;
}

我使用以下参数调用它。

AES_Decrypt(@"d5a75c3377fbd50a24ae372c787d598b633e82f4210f90dfc8e618c47811d812", @"”l*®*ŸÂ€­Û»†.Sì’±—ë", @"3d396f81a3443ca44ce146c91a81d3d8");

但是方法的输出没有返回预期的输出。谁能帮我解决这个问题。

【问题讨论】:

    标签: ios objective-c aes


    【解决方案1】:

    您不能以这种方式将任意数据编码为NSString。并非每个数据序列都是合法的 UTF8 字符串。

    您错误地传递了您的密钥。您传递的密钥长度为 512 位(64 个字节大小的字符)。您正在获取其中的前 256 位,但这些位几乎肯定不是您要传递的密钥(看起来您的意思是密钥为十六进制格式;但您不解码十六进制)。

    您忽略了传递给您的 IV,而只使用由零组成的 IV。

    最后,您将数据转换为 ASCII 字符串,但 ASCII 无法编码任意数据字符串。

    加密不仅仅是调用CCCrypt()。如果你想要一个加密库来处理 Cocoa 和 Python 实现,请参阅RNCryptor

    (我知道这不是如何正确编写此代码的完整答案,但正确的加密实际上是一个相当复杂的主题,您应该避免尝试从头开始编写。正如您在这里看到的那样,这很容易错误地做很多事情,非常小的错误可能会完全破坏您的安全性。我在编写 RNCryptor 时非常小心,我仍然不得不对其进行多次修改以修复安全错误。所以我强烈建议使用高-级框架,而不是尝试使用 CommonCryptor 等低级组件来构建您的加密解决方案。)

    【讨论】:

      【解决方案2】:

      你确定python加密输出的是UTF-8编码的字符串吗?

      【讨论】:

      • 我们在这里尝试过使用 ASCII。 mutableCipher = (NSMutableData *)[cipherText dataUsingEncoding:NSUTF8StringEncoding];
      猜你喜欢
      • 2022-06-13
      • 1970-01-01
      • 2012-11-17
      • 2010-10-07
      • 1970-01-01
      • 1970-01-01
      • 2012-09-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多