0

当我多次调用摘要方法(在​​java中)和CC_SHA1(在Objective-c中)时,我碰巧得到了不同的输出。

请注意,当不使用循环时,我会得到匹配的输出。

以下是我目前正在使用的实现。

目标 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 文档,但我找不到任何有用的东西。

4

1 回答 1

1

一个明显的区别是,在目标 C 中执行的迭代次数比在 Java 中执行的迭代次数少。查看两个 for 循环中的 '<' 与 "<='。

于 2013-10-09T12:28:47.430 回答