【问题标题】:how do I decode md5 passwordencode data in spring [duplicate]我如何在春季解码md5密码编码数据[重复]
【发布时间】:2023-04-04 02:09:01
【问题描述】:

我是 java 和 spring 的新手。我使用 Md5PasswordEncoder 进行密码编码。我该如何解码它。

我的编码是

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

请帮我解码

【问题讨论】:

  • 如果您的目标是在某个时候对其进行解码,为什么还要对其进行编码?

标签: java spring spring-security md5


【解决方案1】:

不能

来自Md5PasswordEncoder的Javadoc:

由于 MD5 是单向哈希,salt 可以包含任何字符

它是单向哈希,所以你不能解码它。

【讨论】:

  • @jermiya 密码不应被解密
【解决方案2】:

像 MD5 这样的散列算法的全部意义在于您无法对其进行解码。它是一种单向函数,不是加密算法。

所以......基本上......你无法解码它。

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

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

在您的代码中,您试图将编码器用于非设计用途。它根本不适用。 Md5 也不是。

这是一个问答,其中包含如何在 Java 中进行加密和解密的示例:

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

【讨论】:

    【解决方案3】:

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

    例子:

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

    您可以阅读更多关于 here 的信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-07-14
      • 2014-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-26
      相关资源
      最近更新 更多