当我多次调用摘要方法(在java中)和CC_SHA1(在Objective-c中)时,我碰巧得到了不同的输出。
请注意,当不使用循环时,我会得到匹配的输出。
以下是我目前正在使用的实现。
Objective-C 代码片段
NSString *haha= [NSString stringWithFormat:@"%@%@",sPassPhrase,sSaltValue];
NSData *abKey0 = [haha dataUsingEncoding:NSASCIIStringEncoding];
NSMutableData *abKey = [NSMutableData dataWithData:abKey0];
unsigned char digest[20];
for(int i=1;i<iIterations;i++)
{
CC_SHA1(abKey.bytes, abKey.length, digest);
abKey = [NSMutableData dataWithBytes:digest length:20];
}
Java 代码片段
String haha = sPassPhrase + sSaltValue;
byte[] abKey = haha.getBytes("US-ASCII");
MessageDigest oSHA1 = MessageDigest.getInstance("SHA-1");
for (int i = 1; i <= iIterations; i++)
{
abKey = oSHA1.digest(abKey);
}
这让我花了几个小时搜索 api 文档,但找不到任何有用的东西。
最佳答案
一个明显的区别是,在 Objective C 中比在 Java 中少进行一次迭代。查看两个 for 循环中的“<”与“<=”。
关于java - Java 和 Objective-c 中的 SHA1 输出在循环内变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19271751/