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