0

我正在尝试解密使用 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");

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

4

2 回答 2

1

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

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

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

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

加密不仅仅是调用CCCrypt(). 如果您想要一个使用 Cocoa 和 Python 实现来处理此问题的加密库,请参阅RNCryptor

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

于 2013-10-17T15:45:14.107 回答
0

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

于 2013-10-17T14:16:39.053 回答