AES encrypt/decrypt ObjectiveC>Python(Tornado)问题

2024-09-24 22:29:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个问题好几天了,不知道怎么解决。我正在制作一个应用程序,它通过pythontornaweb向服务器发送NSDictionary。好吧,我发送的数据用AES256加密,问题是解密。在

Objective-C加密代码(key=“0123456789abcdef”)

// Copy the key data, padding with zeroes if needed
char key[kKeySize];
bzero(key, sizeof(key));
memcpy(key, keyData, keyLength > kKeySize ? kKeySize : keyLength);

size_t bufferSize = [self length] + kCCBlockSizeAES128;
void *buffer = malloc(bufferSize);

size_t dataUsed;

CCCryptorStatus status = CCCrypt(decrypt ? kCCDecrypt : kCCEncrypt,
                                 kCCAlgorithmAES128,
                                 kCCOptionPKCS7Padding,
                                 key, kKeySize,
                                 NULL,
                                 [self bytes], [self length],
                                 buffer, bufferSize,
                                 &dataUsed);

switch(status){
    case kCCSuccess:
        return [NSData dataWithBytesNoCopy:buffer length:dataUsed];
    case kCCParamError:
        NSLog(@"Error: NSDataAES256: Could not %s data: Param error", decrypt ? "decrypt" : "encrypt");
        break;
    case kCCBufferTooSmall:
        NSLog(@"Error: NSDataAES256: Could not %s data: Buffer too small", decrypt ? "decrypt" : "encrypt");
        break;
    case kCCMemoryFailure:
        NSLog(@"Error: NSDataAES256: Could not %s data: Memory failure", decrypt ? "decrypt" : "encrypt");
        break;
    case kCCAlignmentError:
        NSLog(@"Error: NSDataAES256: Could not %s data: Alignment error", decrypt ? "decrypt" : "encrypt");
        break;
    case kCCDecodeError:
        NSLog(@"Error: NSDataAES256: Could not %s data: Decode error", decrypt ? "decrypt" : "encrypt");
        break;
    case kCCUnimplemented:
        NSLog(@"Error: NSDataAES256: Could not %s data: Unimplemented", decrypt ? "decrypt" : "encrypt");
        break;
    default:
        NSLog(@"Error: NSDataAES256: Could not %s data: Unknown error", decrypt ? "decrypt" : "encrypt");
}

free(buffer);

把加密的数据发送到服务器并执行以下操作

^{pr2}$

结果是:

-------------------------解密前--------------------------------

布??c??? ?????d?第页??我呢?G?'??在

-------------------------解密后--------------------------------

是吗?Ƒg,??是吗??? ?(?&97R??? ?? 在

如您所见,被错误地解密。如果你发送未加密的,一切都会完美。在

有什么想法吗?在


Tags: keydatabuffernoterrorcouldencryptcase
1条回答
网友
1楼 · 发布于 2024-09-24 22:29:25

我将检查以确保Objective-C和Python之间的编码是相同的。当我把它转换成十六进制的格式时,我就不会再把它转换成十六进制的格式了。在

顺便问一下,您使用的Python版本是什么?(3.0+及以上版本使用unicode)

相关问题 更多 >