如何在spring

时间:2017-03-09 10:37:38

标签: java spring spring-security md5

我是java和spring的新手。我使用Md5PasswordEncoder进行密码编码。我可以解码它。

我的编码代码是

    Md5PasswordEncoder md5PasswordEncoder = new Md5PasswordEncoder();
    String monthlycost = md5PasswordEncoder.encodePassword(
            empDetails.getMonthlyCost(), null); 
    String monthlyGrossSalary = md5PasswordEncoder.encodePassword(
            empDetails.getMonthlyGrossSalary(), null);  

请帮我解码

3 个答案:

答案 0 :(得分:1)

诸如MD5之类的散列算法的全部意义在于您无法对其进行解码。它是单向函数,而不是加密算法。

所以......基本上......你不能解码它。

应该使用此类的方式是在注册时以明文开头的用户密码。然后您对密码进行哈希(使用salt)并将哈希值存储在数据库中。稍后,当用户尝试登录时,他/她再次以明文形式显示密码。您将其哈希(使用相同的salt),然后将哈希值与先前存储的哈希值进行比较。如果哈希值相同,则用户提供了正确的密码。

换句话说,这使您可以检查用户的密码,而无需在数据库中存储用户的实际密码(以明文或加密方式)。

在您的代码中,您尝试将编码器用于其未设计的目的。它根本不适用。也不是Md5。

这是一个Q& A,以及如何在Java中进行加密和解密的示例:

如果您想搜索,我确定您可以找到使用替代库的其他示例。

答案 1 :(得分:1)

看来,你不是Java的新手,而是一般的编程。 MD5是一种散列算法。散列算法是(或应该是)单向算法。

示例:

如果您要创建登录系统,或者您可以在用户注册时将密码保存为md5。当他尝试登录时,您可以创建哈希值,并在注册时将其与您保存的哈希值进行比较。假设您在数据库中没有密码本身。

您可以详细了解here

答案 2 :(得分:0)

不能

来自Md5PasswordEncoder的Javadoc:

  

由于MD5是单向散列,因此salt可以包含任何字符

它是单向散列,因此您无法对其进行解码。