Ask*_*Ali 6 hash objective-c pbkdf2
这是我的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();
Run Code Online (Sandbox Code Playgroud)
这是我的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);
}
Run Code Online (Sandbox Code Playgroud)
我在iOS中使用的算法是否有任何问题
将 Common CryptoCCKeyDerivationPBKDF函数与选项一起使用kCCPRFHmacAlgSHA1使用。
注意PBEKeySpec keyLength以位为单位,CCKeyDerivationPBKDF derivedKeyLen以字节为单位。
如需更详细的答案,请提供所有输入(hashKey、salt)和十六进制转储格式的输出以及轮数、输出长度(以字节为单位)。
\n\n看到这个答案以获取示例代码。
\n\n\n\n\n更新修改后的问题代码:
\n
CCKeyDerivationPBKDF返回 8 位数据字节,这些字节本质上不是字符,而且即使强制转换为NSASCIIStringEncoding. NSASCIIStringEncoding即使没有返回错误,强制执行也是不正确且无用的。相反,要么使用返回的NSData,要么转换为 Base64 或 HexASCII 编码。
改变
\n\nNSString *myString = [[NSString alloc] initWithData:derivedKey encoding:NSASCIIStringEncoding];\nRun Code Online (Sandbox Code Playgroud)\n\n\n\n\n输出:A\xc2\xb4\xc3\x96\xc2\xba\xc3\xb7"\xc3\xb9\xc3\xaf\xc3\xb3
\n
到
\n\nNSString * myString = [derivedKey base64EncodedStringWithOptions:0];\nRun Code Online (Sandbox Code Playgroud)\n\n\n\n\n输出:QbTWgbr3FSL57/MfBQAz4A==
\n
注意:1000发通常被认为是不够的,应该使用10,000到100,000范围内的东西。
\n\niPhone 6S 上的计时:
\n\n\n舍入秒\n1000 0.003 \n10000 0.032 \n100000 0.309 \n1000000 3.047 \n\n
| 归档时间: |
|
| 查看次数: |
1045 次 |
| 最近记录: |