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

标签 java objective-c encryption tripledes

当我多次调用摘要方法(在​​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/

相关文章:

java - Java加解密中IV和salt的处理

java - 绘制图像后设置的像素发生变化

java - 如何从 Android 应用程序在谷歌浏览器中打开网页隐身

iphone - 获取当前时间并保持更新 - Objective-C

ios - insertRowsAtIndexPaths 不工作,崩溃索引超出范围的对象?

java - 48 位到 48 位使用什么类型的加密?

JAVA - 使用 httpclient 通过 http 代理 (squid) 将文件发布到 google apps 在调用执行时卡住

java - 哪种 m2eclipse 原型(prototype)可用于基于 JBoss/Hibernate 的项目?

iOS:为什么在自定义 TableViewCell 中写入此文本字段的文本似乎不可读

java - 加密 - 解密时数据错误