我一直在研究找到的代码 here 。我得到类似的东西
UKepQT7tW8mGtOJzNaLV2X+Ij/E=
当我使用
查看哈希密码时String t = base64EncoderDecoder.encodeAsString(f.generateSecret(spec).getEncoded());
我的哈希密码。它应该有像 +/= 这样的符号吗?我还预计哈希值会更长。我搞砸了什么吗?
最佳答案
Should it have symbols like +/= ?
嗯,根据第一个 Google 结果( Wikipedia article on Base64 encoding ),+
和 /
是分别映射到 62 和 63 的有效符号。 =
是一个填充字符。
为什么?这只是您使用的编码方法的结果。以 16 为基数进行编码将多使用 50% 的字符(因为每 4 位需要 1 个字符,而不是每 6 位需要 1 个字符)。从您引用的引用文献来看:Also I expected the hash to be longer.
// SHA-1 generates 160 bit hashes, so that's what makes sense here
160 位会产生 27 个字符的 Base64 编码 (160/6 ~= 27),这就是您所拥有的,所以对我来说这似乎是合理的。
关于java - 散列密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11372611/