为什么SHA-256消息摘要在j2objc中给出不同的结果?

时间:2018-01-08 11:13:45

标签: 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));
    }
}

当我使用Java 1.8.0_152在我的64位Mac上运行时,我得到了这个输出: Result:47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=

但是当我使用j2objc编译(并使用-ObjC -ljre_emul标志链接)时,我得到了这个输出: Result:9aX9QtFqIDAnmO9u0wmXm0MAPSMg2fDo6pgxqSdZ+0s=

我做错了吗?

1 个答案:

答案 0 :(得分:1)

您在j2objc支持md.digest(tmp, 0, tmp.length)时发现了一个错误:它将更新的哈希值返回为md.digest(tmp),但应返回未更新的摘要。我提交了issue #929,您可以订阅,以便在修复后收到通知。