gpt4 book ai didi

objective-c - 在 IOS 中实现 PBEKeySpec 加密

转载 作者:太空狗 更新时间:2023-10-30 03:53:08 26 4
gpt4 key购买 nike

这是我的java代码。现在我想在 Objective-C 中实现相同的功能。

int dkLen = 16;
int rounds = 1000;
PBEKeySpec keySpec = new PBEKeySpec(hashKey.toCharArray(),salt.getBytes(), rounds, dkLen * 8);
SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");
return factory.generateSecret(keySpec).getEncoded();

这是我的 iOS 实现

- (void)getHashKey {
NSString *hash_key=@"MY_HASHKEY";
NSString *saltKey = @"MY_SALTKEY";

int dkLen = 16;
NSData *keyData = [hash_key dataUsingEncoding:NSUTF8StringEncoding];
NSData *salt = [saltKey dataUsingEncoding:NSUTF8StringEncoding];
uint rounds = 1000;
uint keySize = kCCKeySizeAES128;

NSMutableData *derivedKey = [NSMutableData dataWithLength:keySize];

CCKeyDerivationPBKDF(kCCPBKDF2, // algorithm
keyData.bytes, // password
keyData.length, // passwordLength
salt.bytes, // salt
salt.length, // saltLen
kCCPRFHmacAlgSHA1, // PRF
rounds, // rounds
derivedKey.mutableBytes, // derivedKey
dkLen*8); // derivedKeyLen

NSString *myString = [[NSString alloc] initWithData:derivedKey encoding:NSASCIIStringEncoding];
NSLog(@"derivedKey: %@", myString);
}

我在 iOS 中使用的算法有什么问题吗

最佳答案

使用 Common Crypto CCKeyDerivationPBKDF 函数和选项 kCCPRFHmacAlgSHA1

注意 PBEKeySpec keyLength 以位为单位,CCKeyDerivationPBKDF derivedKeyLen 以字节为单位。

要获得更详细的答案,请提供所有输入(hashKey、salt)和十六进制转储格式的输出以及轮数、以字节为单位的输出长度。

查看此 SO answer示例代码。

Update for revised question code:

CCKeyDerivationPBKDF 返回 8 位数据字节,这些字节本质上不是字符,许多字节即使强制进入 NSASCIIStringEncoding 也不可打印。即使没有返回错误,也强制使用 NSASCIIStringEncoding 是不正确且无用的。而是使用返回的 NSData 或转换为 Base64 或 HexASCII 编码。

改变

NSString *myString =    [[NSString alloc] initWithData:derivedKey encoding:NSASCIIStringEncoding];

Output: A´Öº÷"ùïó

NSString * myString = [derivedKey base64EncodedStringWithOptions:0];

Output: QbTWgbr3FSL57/MfBQAz4A==

注意:1000 发通常被认为是不够的,应该使用 10,000 到 100,000 范围内的东西。

iPhone 6S 上的时间:

rounds  seconds1000    0.003  10000   0.032  100000  0.309  1000000 3.047  

关于objective-c - 在 IOS 中实现 PBEKeySpec 加密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33315235/

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