我是java和spring的新手。我使用Md5PasswordEncoder进行密码编码。我可以解码它。
我的编码代码是
Md5PasswordEncoder md5PasswordEncoder = new Md5PasswordEncoder();
String monthlycost = md5PasswordEncoder.encodePassword(
empDetails.getMonthlyCost(), null);
String monthlyGrossSalary = md5PasswordEncoder.encodePassword(
empDetails.getMonthlyGrossSalary(), null);
请帮我解码
答案 0 :(得分:1)
诸如MD5之类的散列算法的全部意义在于您无法对其进行解码。它是单向函数,而不是加密算法。
所以......基本上......你不能解码它。
应该使用此类的方式是在注册时以明文开头的用户密码。然后您对密码进行哈希(使用salt)并将哈希值存储在数据库中。稍后,当用户尝试登录时,他/她再次以明文形式显示密码。您将其哈希(使用相同的salt),然后将哈希值与先前存储的哈希值进行比较。如果哈希值相同,则用户提供了正确的密码。
换句话说,这使您可以检查用户的密码,而无需在数据库中存储用户的实际密码(以明文或加密方式)。
在您的代码中,您尝试将编码器用于其未设计的目的。它根本不适用。也不是Md5。
这是一个Q& A,以及如何在Java中进行加密和解密的示例:
如果您想搜索,我确定您可以找到使用替代库的其他示例。
答案 1 :(得分:1)
看来,你不是Java的新手,而是一般的编程。 MD5是一种散列算法。散列算法是(或应该是)单向算法。
示例:
如果您要创建登录系统,或者您可以在用户注册时将密码保存为md5。当他尝试登录时,您可以创建哈希值,并在注册时将其与您保存的哈希值进行比较。假设您在数据库中没有密码本身。
您可以详细了解here。
答案 2 :(得分:0)
你不能!
来自Md5PasswordEncoder
的Javadoc:
由于MD5是单向散列,因此salt可以包含任何字符
它是单向散列,因此您无法对其进行解码。