在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=
我做错了吗?
答案 0 :(得分:1)
您在j2objc支持md.digest(tmp, 0, tmp.length)
时发现了一个错误:它将更新的哈希值返回为md.digest(tmp)
,但应返回未更新的摘要。我提交了issue #929,您可以订阅,以便在修复后收到通知。