使用什么API和算法来使用java加密和解密密码

我目前正在使用Java创建应用程序,我使用java搜索密码加密,但结果是如此巨大,我感到不堪重负。 如何使用Java加密和解密密码? 加密和解密密码的最佳做法是什么? 我猜测MD5不是一种方法,因为它是一种单向哈希。 我使用struts2作为我的框架,想知道他们是否提供密码加密

更新

试试JBCrypt:

String password = "MyPassword123"; String hashed = BCrypt.hashpw(password, BCrypt.gensalt(12)); System.out.println(hashed); // $2a$12$QBx3/kI1SAfwBDFOJK1xNOXK8R2yC7vt2yeIYusaqOisYbxTNFiMy 

从这里下载jBCrypt-0.3 ,查看README文件以获取更多详细信息。

另外我不建议使用MD5,因为它已经坏了。 您可以使用MessageDigest代替您使用SHA512的安全散列方法。 下面的代码我在我的一个项目中使用,它完美地运行

 public String encode(String password, String saltKey) throws NoSuchAlgorithmException, IOException { String encodedPassword = null; byte[] salt = base64ToByte(saltKey); MessageDigest digest = MessageDigest.getInstance("SHA-512"); digest.reset(); digest.update(salt); byte[] btPass = digest.digest(password.getBytes("UTF-8")); for (int i = 0; i < ITERATION_COUNT; i++) { digest.reset(); btPass = digest.digest(btPass); } encodedPassword = byteToBase64(btPass); return encodedPassword; } private byte[] base64ToByte(String str) throws IOException { BASE64Decoder decoder = new BASE64Decoder(); byte[] returnbyteArray = decoder.decodeBuffer(str); if (log.isDebugEnabled()) { log.debug("base64ToByte(String) - end"); } return returnbyteArray; } 

好吧,据我所知,我们已经遵循一些算法来保护密码。

  1. MD5 –
  2. PBKDF2 –
  3. SHA –
  4. BCrypt和SCrypt –

其中BCrypt和SCrypt是更安全的密码安全方式。

有一个非常好的项目专门用于解决Java中的问题。 从本质上讲,它提供了两种加密用户密码的方法: – MD5
– SHA1

看看链接: jasypt

对我来说,我看到MD5是最好的方式,你不需要解密密码,以防用户忘记密码,你可以给他一个生成新密码的方法,对于登录你可以只比较现有的哈希在数据库中和用户所拥有的数据库中

始终使用 单向哈希算法。

我会说GO与MD5哈希。 在DB中存储密码时,请使用MD5哈希。 因此,如果您将密码作为通过 ,则在散列后,它将存储为asjasdfklasdjf789asdfalsdfashdflasdf (32个字符)。

正如您所说,您也想要解密密码。 我会说不要那样做 。 在检查DB的密码时,您可以做的是对密码进行散列并将该字符串与数据库中的字符串进行比较。

 if (DoHashMD5(myPass).equals(rs.getString(2))) { System.out.print("You are registered user!!!"); } else { System.out.print("Invalid user!!!"); } 

这里rs.getString(2)将是您的查询参数。