【问题标题】:What password length should I use for a Jasypt-hashed password?我应该为 Jasypt 散列密码使用什么密码长度?
【发布时间】:2012-12-19 11:44:09
【问题描述】:

我正在使用 Java 6、Jasypt 和 BouncyCastle 来生成散列密码。我将它们存储在具有默认 UTF-8 字符编码的 MySQL 5.5 db 中。我试图弄清楚我的 VARCHAR 密码字段应该被赋予多长时间,因为我正在使用 SHA-256 散列算法和 20 字节的 RandomSaltGenerator。这是我在 Spring 应用程序上下文中的声明:

<beans:bean id="bcProvider" class="org.bouncycastle.jce.provider.BouncyCastleProvider" /> 

<beans:bean id="jasyptStringDigester" class="org.jasypt.digest.StandardStringDigester">
    <beans:property name="algorithm">
        <beans:value>SHA-256</beans:value>
    </beans:property>
    <beans:property name="provider">
        <beans:ref bean="bcProvider" />
    </beans:property>
    <beans:property name="saltGenerator">
        <beans:ref bean="saltGenerator" />
    </beans:property>
    <beans:property name="saltSizeBytes" value="20" />
</beans:bean>

感谢您的指导, - 戴夫

【问题讨论】:

  • 我认为您应该使用较慢的哈希算法。

标签: mysql hash passwords maxlength jasypt


【解决方案1】:

SHA-256 散列函数的输出可能是 256 位长,这并不奇怪。生成的字符数取决于您的编码方式。

一个直接的二进制编码,每字节 8 位,会给你 32 个字节,但如果你将哈希输出存储在一个文本字段中,你可能使用例如编码它。 Base64(每个字符 6 位,填充为 4 个字符的倍数,总共 44 个字符)或可能是十六进制(每个字符 4 位,总共 64 个字符)。

除了哈希之外,密码字段通常还包含重建它所需的盐。这将添加一些额外数量的字符,这取决于所选择的确切密码哈希方案、输出编码和参数(例如您的saltSizeBytes)。

无论如何,如果您的密码散列方法的输出长度没有明确记录,找到它的最简单方法可能是只提供一些测试密码并查看它返回的内容。 (通常,输出的长度应该是恒定的。)然后,如果您愿意,可以在数据库定义中添加一些边距以确保安全。

哦,正如 Waleed Khan 所说,您确实应该使用实现 key stretching 的密码哈希方法,例如 PBKDF2

【讨论】:

  • 感谢您提供有关按键拉伸的建议。至于这个,答案是 72。
猜你喜欢
  • 2011-08-18
  • 2010-09-19
  • 1970-01-01
  • 2015-06-28
  • 2021-05-19
  • 1970-01-01
  • 2023-03-18
相关资源
最近更新 更多