为什么 SHA-256 消息摘要在 j2objc 中给出不同的结果?
Why does SHA-256 message digest give different result in j2objc?
当 运行在 Java 和 j2obc 中使用我的代码时,我得到了不同的结果。我的 java 代码如下所示:
import java.security.DigestException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Base64;
public class TestScrypt {
public static void main(String[] args) throws NoSuchAlgorithmException, DigestException {
MessageDigest md = MessageDigest.getInstance("SHA-256");
md.update(new byte[64]);
byte[] tmp = md.digest();
md.digest(tmp, 0, tmp.length);
System.out.println("Result:" + Base64.getEncoder().encodeToString(tmp));
}
}
当我在我的 64 位 Mac 上 运行 使用 Java 1.8.0_152 时,我得到了这个输出:
Result:47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=
但是当我使用 j2objc(和 link 使用 -ObjC -ljre_emul 标志进行编译时,我得到了这个输出:
Result:9aX9QtFqIDAnmO9u0wmXm0MAPSMg2fDo6pgxqSdZ+0s=
我是不是做错了什么?
您在 j2objc 对 md.digest(tmp, 0, tmp.length)
的支持中发现了一个错误:它 return 是一个更新的散列 md.digest(tmp)
,但应该 return 是一个未更新的摘要。我提交了 issue #929,你可以订阅它,以便在它修复时得到通知。
当 运行在 Java 和 j2obc 中使用我的代码时,我得到了不同的结果。我的 java 代码如下所示:
import java.security.DigestException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Base64;
public class TestScrypt {
public static void main(String[] args) throws NoSuchAlgorithmException, DigestException {
MessageDigest md = MessageDigest.getInstance("SHA-256");
md.update(new byte[64]);
byte[] tmp = md.digest();
md.digest(tmp, 0, tmp.length);
System.out.println("Result:" + Base64.getEncoder().encodeToString(tmp));
}
}
当我在我的 64 位 Mac 上 运行 使用 Java 1.8.0_152 时,我得到了这个输出:
Result:47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=
但是当我使用 j2objc(和 link 使用 -ObjC -ljre_emul 标志进行编译时,我得到了这个输出:
Result:9aX9QtFqIDAnmO9u0wmXm0MAPSMg2fDo6pgxqSdZ+0s=
我是不是做错了什么?
您在 j2objc 对 md.digest(tmp, 0, tmp.length)
的支持中发现了一个错误:它 return 是一个更新的散列 md.digest(tmp)
,但应该 return 是一个未更新的摘要。我提交了 issue #929,你可以订阅它,以便在它修复时得到通知。