fmt.Println(getSha256([]byte("5nonce=5")))
41 79 186 235 199 123 95 226 16 59 51 161 112 245 192 50 21 66 180 250 179 109 153 18 233 148 16 237 156 69 163 150]
MessageDigest md = MessageDigest.getInstance("SHA-256");
md.update("5nonce=5".getBytes());
byte[] digest = md.digest();
[41, 79, -70, -21, -57, 123, 95, -30, 16, 59, 51, -95, 112, -11, -64, 50, 21, 66, -76, -6, -77, 109, -103, 18, -23, -108, 16, -19, -100, 69, -93, -106]
为什么他们不一样?我需要如何更改java版本以使其与Go版本完全相同?
为什么他们不一样?
他们不是,真的。它们是一样的。只是Java没有无符号字节--所以任何设置了top bit的字节都是负数。在这种情况下,您将看到Java result=Go result-256。
如果将两个字节数组转换为十六进制或base64,您将看到相同的结果。
null 谢谢你。
我总是假设当执行时,优化器自然会使用有效的按位操作,就像我写了
根据关键码值(Key value)直接进行访问的数据结构;它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度;这个映射函数叫做散列函数,存放记录的数组叫做散列表。
考虑 HashSet 作为一个 HashMap,在此处我们只关心键(HashSet<T> 实际上只是一个包围 HashMap<T, ()> 的装包(wrapper))。(原文:Consider a HashSet as a HashMap where we just care about the keys (HashSet<T> is, in actuality, just a wrapper a
我将用于sha256实现,如下所示。
我在这里漏掉了什么?我试过上/下现金,每个字节之间的空格。我不确定还能试什么。 这个问题开始是因为我在Python中实现了这个,但在我担心代码之前,我试图理解为什么这是不同的。