gpt4 book ai didi

python - 用 Python 和 Objective C 解密

转载 作者:太空宇宙 更新时间:2023-11-03 15:51:38 27 4
gpt4 key购买 nike

我正在使用 python 解密数据并获得成功,但是当我尝试使用 Objective c 解密相同的数据时,解密会成功,但是当将解密的 NSData 转换为 NSString 时返回 Null。我已通过应用不同的编码解码检索到的 NSData,但返回 null 或不可读的数据。

请参阅下面的代码。

Python

salt = b'saltysalt'
my_val = ‘TGIF40)volubly’
iv = b' ' * 16
iterations = 1003

# Generate key from values above
key = PBKDF2(my_pass, salt, length, iterations)

encrypted_value = \225O\373\235Y\363\265\326\341\206\352\214O\270\343u\300/k;e7\202;\215d\230\364
cipher = AES.new(key, AES.MODE_CBC, IV=iv)
decrypted = cipher.decrypt(encrypted_value)
print(decrypted)
Output : 5105105105105100

objective-c

NSString * my_val = @“TGIF40)volubly”
NSData* myValdata = [my_val dataUsingEncoding:NSUTF8StringEncoding];
NSMutableData *derivedKey = [NSMutableData dataWithLength:kCCKeySizeAES128];
NSData *encrypted_inputData = <00954ffb 9d59f3b5 d60ce186 ea8c4f14 b804e375 c02f6b3b 6537823b 8d6498f4>

NSData *saltbytes = [@“saltysalt”dataUsingEncoding:NSUTF8StringEncoding];

CCKeyDerivationPBKDF(kCCPBKDF2, myValdata.bytes, myValdata.length, saltbytes.bytes, saltbytes.length, kCCPRFHmacAlgSHA1, 1003, derivedKey.mutableBytes, derivedKey.length);
NSLog(@"%@",derivedKey);

size_t outLength;
NSMutableData *outputData = [NSMutableData dataWithLength:(encrypted_inputData.length + kCCKeySizeAES128)];

Printing description of key:
derivedKey = <dfbf16cc 449619be b57b0aba eb92de70>

CCCryptorStatus result = kCCSuccess;
result = CCCrypt(kCCDecrypt, // kCCEncrypt or kCCDecrypt
kCCAlgorithmAES,
kCCOptionPKCS7Padding | kCCModeCBC,
derivedKey.bytes,
kCCKeySizeAES256,
NULL,
encrypted_inputData.bytes,
encrypted_inputData.length,
outputData.mutableBytes,
outputData.length,
&outLength);

if (result != kCCSuccess) {
if (error != NULL) {
*error = [NSError errorWithDomain:@"com.your_domain.your_project_name.your_class_name."
code:result
userInfo:nil];
}
return nil;
}
[outputData setLength:outLength];
NSString* retStr = [NSString stringWithUTF8String:[outputData bytes]];

outputData的打印说明: <0a0df388 cf535290 0b1d2712 343e3c69 d633cab7 7cf5382a 92d88207 1f5347bd>

有人可以帮忙吗?

最佳答案

1.不要指定kCCModeCBC,它不与CCCrypt一起使用。 CCCrypt 默认使用 CBC 模式。

CCCrypt 选项是:

enum {
/* options for block ciphers */
kCCOptionPKCS7Padding = 0x0001,
kCCOptionECBMode = 0x0002
/* stream ciphers currently have no options */
};
typedef uint32_t CCOptions;

kCCModeCBC 仅与 CCCryptorCreateWithMode 一起使用,并且值为 2,如果使用该值代替 kCCModeCBC实际上会指定 ECB 模式。这是苹果做出的错误选择。

2.您提供 16 字节 key ,但指定 256 位(32 字节) key :

derivedKey  = <dfbf16cc 449619be b57b0aba eb92de70> // 16-bytes

kCCKeySizeAES256, // 32-bytes
  • 指定输出数据大小时,请使用 kCCBlockSizeAES128
  • 关于python - 用 Python 和 Objective C 解密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41237706/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com