Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用Md5保存密码_Java_Sql_Database_Encryption_Password Protection - Fatal编程技术网

Java 使用Md5保存密码

Java 使用Md5保存密码,java,sql,database,encryption,password-protection,Java,Sql,Database,Encryption,Password Protection,我正在使用Postgresql、hibernate和Java,我需要存储密码。有人能建议我如何用md5加密密码吗。还有更好的方法在数据库中存储安全密码吗 谢谢您不应该使用md5进行密码哈希。它专为速度而设计,使攻击更容易。改用。此外,您不应该在密码存储后尝试解密密码。有关如何通过用户输入验证密码的信息,请参见bcrypt页面上的示例。更多关于如何安全存储密码的信息 jBcrypt使用起来也非常简单。以下是如何散列密码: BCrypt.hashpw(password_from_user, BCry

我正在使用Postgresql、hibernate和Java,我需要存储密码。有人能建议我如何用md5加密密码吗。还有更好的方法在数据库中存储安全密码吗


谢谢

您不应该使用md5进行密码哈希。它专为速度而设计,使攻击更容易。改用。此外,您不应该在密码存储后尝试解密密码。有关如何通过用户输入验证密码的信息,请参见bcrypt页面上的示例。更多关于如何安全存储密码的信息

jBcrypt使用起来也非常简单。以下是如何散列密码:

BCrypt.hashpw(password_from_user, BCrypt.gensalt());
为了验证它:

BCrypt.checkpw(password_from_user, hashed_password_from_database)
不是一个,而是一个。这是非常不同的!您可以将散列密码存储在数据库中,但(通常)无法从密码的散列中恢复密码这是精心设计的。

在某些情况下,可以从散列中获取密码-例如,如果密码是字典中的单词,则可以使用密码恢复。如果密码足够短,并且使用了有限范围内的字符,则攻击可能会恢复密码。存储散列密码时,应使用and(例如)使这些攻击更加困难


您还应该知道,MD5被认为已损坏,建议不要将其用于新的应用程序。例如,有更好的选择。

如果要使用哈希算法,则不(不能)解密密码。将密码散列并存储散列。当用户将来提供密码时,您可以使用相同的算法对其进行散列,并将新的散列与以前存储的内容进行比较

您可以使用Java中的类来散列值。参考号:


编辑:另外,我同意其他人的意见,他们说不要再使用MD5了。这是一个以前很常见的旧算法,但它已经被攻击到毫无价值的地步(密码)。在线上有各种各样的MD5反向查找资源。

如果您安装了contrib模块,您可以在postgres中进行反向查找

然后,您可以像这样加密密码:

update ... set passwordhash = crypt('new password', gen_salt('md5'));
当然你根本无法解密它

正如其他人指出的,这可能是一个坏主意,这取决于你正在尝试做什么。我以前被迫使用MD5,因为另一个应用程序要求使用它,但您不想向世界广播该哈希。

1)MD5没有解密功能。
2) MD5是一种古老的技术,非常适合检查两个字符串是否相同。
3) MD5会受到字典攻击。
4) 使用盐可以使MD5更加安全。

5) 我们使用MD5实现低级别的安全性,因为散列可以很容易地跨平台复制。(C++,vb.net,VB6,C#,php…

我发现加密库非常有用。

如果您使用MD5(或其他哈希算法)隐藏密码,则无法恢复原始密码。但是,这可能不是必需的-通常您所需要做的只是检查用户输入的密码是否与存储的密码相同,在这种情况下,您可以计算该密码的MD5(或其他哈希),并查看您是否得到与存储的密码相同的密码。但是,如果您想使用密码登录数据库,则需要原始密码,而MD5不是您想要的。(顺便说一句,MD5被认为是坏的,所以最好选择另一种算法!)您不能以任何方式“解密”MD5生成的哈希值,至少现在是这样。如果可以,你基本上会“打破”它。MD5是加密哈希函数之一:不要将MD5用于密码!我可以使用什么来确保数据库中密码的安全性database@Noor你能解释一下为什么不使用md5或sha1,因为这是一种常见的方法吗?最后一个链接解释了这一切。只有在有人做出类似旧Unix哈希算法的fastbcrypt之前,这才有效。@JOTN这没有任何意义。bcrypt被设计得很慢,它的慢度被设计成可适应的。老的Unix crypt也是出于同样的原因被设计得很慢。然后有人提出了fastcrypt,它可以更快地产生相同的结果。由于加密后的值可以被任何用户访问,这使得许多系统面临黑客攻击。如果它们不能在合理的时间内受到暴力攻击,为什么要保护它们呢?我不建议在hibernate中使用DBMS特定的解决方案。数据库之间的可移植性是使用它的一大优势。@JOTN谢谢,这很有趣。同意。在我看来,salt+密码上的SHA-256应该足以满足99.9%的应用程序。