我考虑学习一些新东西,并开始在一个新的小型项目中使用Google Guava.
我要做的第一件事就是实现基于密钥交换的简单身份验证.
该计划是合并一些值并生成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而不是简单地组合给定值?
解决方法:
在第一个代码段中,您将执行以下操作:
final String toHash = id + ts + secret;
ts长的地方;但是,在上面的语句中,它将作为字符串追加.
在第二个片段中,您将执行以下操作:
.putLong(ts)
因此,您的输出将有所不同…您应该
.putString(String.valueOf(ts))
代替.
标签:guava,hash,java 来源: https://codeday.me/bug/20191029/1963073.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。