gpt4 book ai didi

php - RNCryptor AES256 匹配 PHP MCRYPT_RIJNDAEL_256

转载 作者:行者123 更新时间:2023-12-03 02:35:18 27 4
gpt4 key购买 nike

我从 iOS 应用程序中调用的 PHP API 要求以某种自定义方式对有效负载进行加密。我在使用 RNCryptor 在 Objective-C 中复制这种方法时遇到了麻烦。

以下是用于加密字符串的 PHP 代码:

function encrypt($string) {
$key = 'some-random-key';
return base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, md5($key), $string, MCRYPT_MODE_CBC, md5(md5($key))));
}

这就是我尝试在 Objective-C 中实现相同加密结果的方法:

+ (NSData*)encryptData:(NSData*)sourceData {

NSString *keyString = @"some-random-key";
NSData *key = [[keyString MD5String] dataUsingEncoding:NSUTF8StringEncoding];
NSData *iv = [[[keyString MD5String] MD5String] dataUsingEncoding:NSUTF8StringEncoding];

NSMutableData *encryptedData = [NSMutableData data];

RNCryptorEngine *cryptor = [[RNCryptorEngine alloc] initWithOperation:kCCEncrypt settings:kRNCryptorAES256Settings key:key IV:iv error:nil];

[encryptedData appendData:[cryptor addData:sourceData error:nil]];
[encryptedData appendData:[cryptor finishWithError:nil]];

return encryptedData;

}

但是两个函数的结果永远不匹配。例如,对于同一个单字字符串,PHP 代码返回 J39gRcuBEaqMIPP1VlizdA8tRjmyAB6za4zG5wcOB/8=,而在 Objective-C 中(在生成的 NSData 上运行 base64EncodedStringWithOptions: 后)我'我得到1FGpZpVm2p4z3BBY6KW2fw==

我需要在 RNCryptor 设置中进一步调整某些内容才能使其正常工作吗?

更新

我直接使用了原生 iOS CommonCrypto 框架,而没有完全使用第三方 RNCryptor 库。不过,我始终得到与 RNCryptor 相同的结果。我什至尝试在我的 Objective-C 和 PHP 代码片段中实现 AES128,但即使如此也从未使两个环境的结果匹配......

更新2

我使用的MD5String方法是NSString上的一个类别,定义如下:

- (NSString *)MD5String {
const char *cstr = [self UTF8String];
unsigned char result[16];
CC_MD5(cstr, strlen(cstr), result);

return [[NSString stringWithFormat:
@"%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X",
result[0], result[1], result[2], result[3],
result[4], result[5], result[6], result[7],
result[8], result[9], result[10], result[11],
result[12], result[13], result[14], result[15]
] lowercaseString];
}

最佳答案

尽管大多数答案都集中在 MD5 哈希上,但最有可能导致问题的是 MCRYPT_RIJNDAEL_256 不是 AES。它没有指定 key 大小为 256,而是指定 block 大小为 256,而 AES 的 block 大小始终为 128 位。至于其他参数,在双方加密例程之前以十六进制打印出它们的值即可查出它们的值。

关于php - RNCryptor AES256 匹配 PHP MCRYPT_RIJNDAEL_256,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19777342/

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