密码加密与Spring / Hibernate的 - Jasypt还是其他什么东西? [关闭]

2019-07-29 13:46发布

在使用Spring和Hibernate(JPA)的数据访问层在Java应用程序堆栈,什么是应用(希望使用注释)的密码加密的好方法,你在哪里可以找到更多关于得非常好(教程等)?

它的了解,我会用一个JCA支持的算法来加密密码,但我宁愿没有实现包装的逻辑,如果有一个简单的方法。

我看着Jasypt,并且是)想知道,这是一个很好的选择,以及如何做到这一点和b)还有什么人都在使用这一点。 如果有人使用Jasypt或替代,你的经验细节将是巨大的。

Answer 1:

Java有都已经为您提供了所需的库。 简单地创建一个实用方法如在描述实现与盐散列OWASP 。

如果你真的不希望自己的代码,不介意额外的依赖,似乎四郎图书馆(原JSecurity )具有实现什么是OWASP所描述的。

它也像你提到的JASYPT库有一个类似的工具 。

我知道这个答案没有提到春天或休眠,但我不清楚你是怎么想借助他们在这种情况下。



Answer 2:

您可以使用Jasypt与Hibernate在飞行中进行加密或散列你的属性,如果这是你在找什么。 用于计算摘要(哈希值)的实际的算法,如果你想推出自己以及使用JCE是非常简单的。



Answer 3:

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

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

在Hibernate中,只存储为一个字符串。 在验证方面,有这样的方法:

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


Answer 4:

似乎没有要与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()所在。



Answer 5:

如果您在应用程序中使用Spring,那么你也可以使用Spring Security的 ,它为您提供了几个密码编码器,即ShaPasswordEncoder你可以找到它的StackOverflow



Answer 6:

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

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

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



文章来源: Password encryption with Spring/Hibernate - Jasypt or something else? [closed]