为什么 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,你可以订阅它,以便在它修复时得到通知。