Java 随机salt md5实现,包括新注册/更改密码

Java 随机salt md5实现,包括新注册/更改密码,java,passwords,struts,md5,salt,Java,Passwords,Struts,Md5,Salt,我试图在现有的应用程序上实现随机salt md5算法。用户密码作为md5散列存储在数据库中。对于现有用户,请遵循以下步骤 在客户端(javascript) 在服务器端 server_password = md5(md5_password + same_random_salt), check client_password to server_password 我正在努力寻找解决方案,在数据库中存储用户md5密码而不含盐,以防更改密码 谢谢首先:不要使用MD5:它不够坚固 @Shaggy Fro

我试图在现有的应用程序上实现随机salt md5算法。用户密码作为md5散列存储在数据库中。对于现有用户,请遵循以下步骤

在客户端(javascript)

在服务器端

server_password = md5(md5_password + same_random_salt),
check client_password to server_password
我正在努力寻找解决方案,在数据库中存储用户md5密码而不含盐,以防更改密码


谢谢

首先:不要使用MD5:它不够坚固

@Shaggy Frog的建议很好,请使用bycrypt。这些帖子应该可以帮助你:


见下文

当有人保存密码时,您将在服务器上执行以下操作:

BCrypt.hashpw(plain_password, salt);
当有人尝试登录时:

if(BCrypt.checkpw(password_typed_by_user, stored_hash)
{
  //itmatches.. log him/her in.
} 
你可以使用用户名(或者用户名中的几个字母)作为盐,这样你就不必把它存储在什么地方了


密码更改时您需要再次获取纯文本密码(在服务器上)并将其再次散列,就像最初保存密码时一样。如果你正在考虑检索,那是没有办法的,这就是散列的要点。像大多数网站一样,您可以将密码更改为一些随机数字,然后通过电子邮件发送到请求的地址

首先:不要使用MD5:它不够坚固

@Shaggy Frog的建议很好,请使用bycrypt。这些帖子应该可以帮助你:


见下文

当有人保存密码时,您将在服务器上执行以下操作:

BCrypt.hashpw(plain_password, salt);
当有人尝试登录时:

if(BCrypt.checkpw(password_typed_by_user, stored_hash)
{
  //itmatches.. log him/her in.
} 
你可以使用用户名(或者用户名中的几个字母)作为盐,这样你就不必把它存储在什么地方了


密码更改时您需要再次获取纯文本密码(在服务器上)并将其再次散列,就像最初保存密码时一样。如果你正在考虑检索,那是没有办法的,这就是散列的要点。像大多数网站一样,您可以将密码更改为一些随机数字,然后通过电子邮件发送到请求的地址

客户端加密是无用的,因为您最终无法控制结果。只有服务器端加密有效

将密码存储为MD5哈希不是最佳做法。这就是网站容易被黑客入侵的原因。盐对你没有帮助


.

客户端加密是无用的,因为您最终无法控制结果。只有服务器端加密有效

将密码存储为MD5哈希不是最佳做法。这就是网站容易被黑客入侵的原因。盐对你没有帮助


.

第100次,停止使用MD5以安全的方式存储密码。您不应该在客户端进行盐析/散列。盐应该保密。如果您不想在清除服务器中发送密码来执行盐+散列,请考虑启用SSL,或者使用公钥加密来屏蔽它。不管怎样,盐都不应该暴露在外。在这两种情况下,依靠Javascript来实现这一点都不是特别可靠。第100次,停止使用MD5来以安全的方式存储密码。您不应该在客户端进行盐析/散列。盐应该保密。如果您不想在清除服务器中发送密码来执行盐+散列,请考虑启用SSL,或者使用公钥加密来屏蔽它。不管怎样,盐都不应该暴露在外。在这两种情况下,依靠Javascript来实现这一点都不是特别可靠。感谢您的帮助,我正在服务器上使用JavaStruts1.1。基本上,我是在尝试对网络上旅行的密码进行编码。但我无法理解你用javascript检查用户密码的解决方案,我怎么知道哪个用户正在尝试登录。我自己也不明白你为什么需要javascript。我指出的第二个问题使用了JavaBCrypt库。它应该对你有用。为什么您要尝试验证客户端上的用户,当用户登录时,您会联系您的服务器,在服务器上用bCrypt散列用户密码,然后检查它是否与您的数据库记录中的用户名匹配。谢谢,我一定会尝试bccript。所以,我应该使用SSL与客户端浏览器通信,并使用BCcript在数据库中存储salt密码散列。感谢帮助,我正在服务器上使用JavaStruts1.1。基本上,我是在尝试对网络上旅行的密码进行编码。但我无法理解你用javascript检查用户密码的解决方案,我怎么知道哪个用户正在尝试登录。我自己也不明白你为什么需要javascript。我指出的第二个问题使用了JavaBCrypt库。它应该对你有用。为什么您要尝试验证客户端上的用户,当用户登录时,您会联系您的服务器,在服务器上用bCrypt散列用户密码,然后检查它是否与您的数据库记录中的用户名匹配。谢谢,我一定会尝试bccript。所以,我应该使用SSL与客户端浏览器通信,并使用BCcript在数据库中存储salt密码散列。