在数据访问层中使用 Spring 和 Hibernate (JPA) 的 Java 应用程序堆栈中,应用密码加密的好方法是什么(希望使用注释),以及在哪里可以找到有关完成此操作的更多信息(教程等)?

据了解,我会使用 联合协会 支持加密密码的算法,但如果有一种简单的方法,我宁愿不必实现包装器逻辑。

我正在研究 Jasypt,并且 a)想知道这是否是一个好的选择以及如何做到这一点以及 b)人们还使用什么来实现此目的。如果有人使用 Jasypt 或替代方案,请提供您的体验细节,那就太好了。

有帮助吗?

解决方案

Java 已经为您提供了所有必需的库。只需创建一个实用方法来实现使用盐进行哈希处理,如所述 OWASP.

如果您真的不想拥有该代码并且不介意额外的依赖项,那么似乎 四郎 图书馆(以前 捷安全)有一个 执行 OWASP 所描述的内容。

看起来你提到的 JASYPT 库也有一个 类似的效用.

我意识到这个答案没有提到 Spring 或 Hibernate,但我不清楚您希望如何在这种情况下利用它们。

其他提示

您可以使用 Jasypt与Hibernate 来加密,或者如果多数民众赞成在飞行哈希你的属性您正在寻找。用于计算摘要(哈希值)实际算法是相当简单的,如果你想滚动使用JCE自己也是如此。

MD5或SHA-256就可以了,虽然现在MD5是裂化。

也许我误解的问题,但它应该只是比较散列的口令。

在休眠,只是存储为一个字符串。所述验证侧,具有等的方法:

public validate(String user, String pass)
{
    if(getUser(user).getPass().equals(getHash(pass)))
        return true;
    return false;
}

似乎没有要与Jasypt做一个Hibernate的具体方式,但你可以设置一个密码加密春:

  <!-- 
   Set up string digester here so we can configure it for more pools if it's a problem... 
  -->
  <bean id="stringDigester" class="org.jasypt.digest.PooledStringDigester">
    <!-- same settings as StrongPasswordGenerator -->
    <property name="poolSize" value="2"/>
    <property name="algorithm" value="SHA-256"/>
    <property name="iterations" value="100000"/>
    <property name="saltGenerator">
      <bean class="org.jasypt.salt.RandomSaltGenerator"/>
    </property>
    <property name="saltSizeBytes" value="16"/>
  </bean>

  <!-- ...and then we only have to deal with the passwordEncryptor interface in code. -->
  <bean id="passwordEncryptor" class="com.myproject.util.StringPasswordEncryptor">
    <property name="stringDigester" ref="stringDigester"/>
  </bean>

在此之后,可以调用context.getBean( “passwordEncryptor”),以获得加密器,然后调用任一encryptPassword()或checkPassword()所在。

如果您在应用程序中使用 Spring,那么您还可以使用 春季安全,它为您提供了几种密码编码器,即 Sha密码编码器您可以在以下位置找到它: 堆栈溢出

我只是用类似的东西来SHA-256(username + ":" + password + ":" + salt)并将其存储在数据库中称为passwd的64字符列。

维基说,涉及的盐:“盐复杂数据使用字典条目的预先加密字典攻击:使用盐的每个比特加倍所需的存储和计算量...对于最佳的安全性,该盐值是保密的,从密码数据库分开的。这提供了一个优点,当一个数据库被盗,但该盐是不“。

所以进行认证,从与提供的用户名的数据库得到用户,然后生成通过使用他们的登录尝试提供的密码相同的散列,并比较其在数据库中。此外,在某些速率限制的登录尝试(例如,每5 5分钟的时间)添加。如果用户忘记了自己的密码,千万不要给他们发电子邮件的密码(如你将它存储没有),也没有给他们发邮件新生成的密码,而是给他们发邮件的链接以更改密码键/现时/盐更改密码你可以核对网址。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top