我一直在玩here找到的代码。我得到像
这样的东西UKepQT7tW8mGtOJzNaLV2X+Ij/E=
当我使用
查看散列密码时String t = base64EncoderDecoder.encodeAsString(f.generateSecret(spec).getEncoded());
我的哈希密码。它应该有+ / =这样的符号吗?此外,我希望哈希更长。我搞砸了什么吗?
答案 0 :(得分:3)
是否应该包含+ / =?
等符号
嗯,根据应该是第一个Google结果(Wikipedia article on Base64 encoding),+
和/
是分别映射到62和63的有效符号。 =
是填充字符。
此外,我预计哈希会更长。
为什么呢?这只是您正在使用的编码方法的结果。在基数16中对某些内容进行编码将占用50%以上的字符(因为每4位需要1个字符,而不是每6位1个字符)。从您引用的参考文献中可以看出:
// SHA-1 generates 160 bit hashes, so that's what makes sense here
160位会产生27个字符的Base64编码(160 / 6~ = 27),这就是你所拥有的,所以对我来说这似乎是合理的。