【问题标题】:hashed password哈希密码
【发布时间】:2025-07-10 19:45:01
【问题描述】:

我一直在玩弄找到here 的代码。我得到了类似的东西

UKepQT7tW8mGtOJzNaLV2X+Ij/E=

当我使用

查看散列密码时
String t = base64EncoderDecoder.encodeAsString(f.generateSecret(spec).getEncoded());

我的哈希密码。它应该有像 +/= 这样的符号吗?我也预计哈希会更长。我是不是搞砸了什么?

【问题讨论】:

    标签: java cryptography passwords


    【解决方案1】:

    它应该有像 +/= 这样的符号吗?

    好吧,根据应该是第一个 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),这就是你所拥有的,所以对我来说这似乎是合理的。

    【讨论】: