3
我想过学习一些新东西,并开始在一个新的小项目中使用Google Guava。不明白番石榴PrimitiveSink
我必须做的第一件事之一是实现一个简单的基于密钥交换的认证。
该计划是,结合一些值,并生成一个SHA256散列。
在纯Java是
final String toHash = id + ts + secret;
final MessageDigest digest = MessageDigest.getInstance("SHA-256");
final byte[] hash = digest.digest(toHash.getBytes("UTF-8"));
final String result = getHexFormated(hash)
番石榴我试图
final Hasher hasher = Hashing.sha256().newHasher().putString(id, Charsets.UTF_8)
.putLong(ts).putString(secret, Charsets.UTF_8);
final HashCode hashcode = hasher.hash();
如果我比较hashcode.toString第一个结果()它是完全不同的。 如果我比较byte []本身,要小心,那不是getHexFormated是错的,字节数组也是完全不同的。
那么这里有什么问题?一个PrimitiveSink而不是简单地组合给定的值是什么?
在你的第一个代码片段中,你将'long'转换为'String';在第二个中,您直接放置了“long”值!试着把'String.valueOf(ts)'而不是'ts'。 – fge
你是对的,就是这样。你可以发布它作为答案,所以我可以投票。那么PrimitiveSink在这里做什么?它不是简单地将这些部分组合在一起吗? – Nabor
实际上,一个'PrimitiveSink'什么也不做,它只是一个接口,它应该吞噬你扔在它上面的所有东西;一个'Hasher'只是简单的实现了这个接口(并且事实证明它变成了'byte's)。 – fge