Java和Objective-c中的SHA1输出在循环内变化

时间:2013-10-09 12:16:17

标签: java objective-c encryption tripledes

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

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

以下是我目前正在采用的实施方式。

Objective C Snippet

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

1 个答案:

答案 0 :(得分:1)

一个明显的区别在于,您在目标C中执行的迭代次数少于在Java中执行的迭代次数。看看'&lt;'与两个for循环中的“&lt; =”相对。