MD5 JavaScript实现

3

我有一个表单,用户可以在输入文本字段中输入密码。我想将该字符串转换为MD5,以便在提交到操作页面时,我会得到字符串的MD5版本而不是字符串本身。是否可能仅在提交后而不是在输入文本中更改输入值?

类似这样:

function go(){
   var pass = document.getElementsByName('pass')[0].value;
   pass = md5(pass);
   form.pass.value=pass; 
}

这只是一个伪代码,但通过这种方式它会将用户插入的文本更改为md5版本。我希望用户不必看到它,但在php页面中,在表单$ _POST ['pass']的操作中,将具有pass的md5版本。我希望你明白了。我的英语不是很好 ;)

解决方案: HTTPS是最好的解决方案,但要避免它,可以创建一个隐藏的输入字段,将其填充为md5密码并清除密码字段;)

var rp = md5(pass.value);
document.rP.value=rp;
pass.value="";

1
为什么你应该在任何地方输出密码(即使是md5)?如果你真的需要它,你应该将它存储在会话中。 - djot
2
你的意思是:1. 在表单中以明文形式输入密码,例如“ABC”,但2. 发送到服务器时不要以明文形式发送?(因此,在发布之前对其进行md5()处理?然后您需要使用JavaScript或更好地使用HTTPS) - djot
1
我看不到这样做的任何好处。在将密码发送到服务器之前进行MD5处理无法阻止重放攻击,因为您只需再次发送相同的MD5哈希即可。不知道哈希是哈希什么数据并不是问题。如果您需要安全地发送数据,则需要通过HTTPS发送。 - GordonM
2
@JackTurky 正如我所说,如果表单未通过HTTPS提交,则易受重放攻击。您不必知道原始哈希值即可再次发送相同的哈希值。此外(这刚刚发生给我),禁用JavaScript的用户将无法访问您的网站。 - GordonM
1
无论如何:http://phpjs.org/functions/md5:469 - ZiTAL
显示剩余14条评论
1个回答

3

你正在错误的方式中尝试解决问题。

最好的解决方案是使用HTTPS。这意味着您无需担心混淆输入的密码。

在我的解决方案中,我通过HTTPS接受明文密码,然后进一步检查它们的密码是否是我本地存储的12,000个左右的“简单”密码之一。


我知道 https.. 我已经学过它.. 但是我无法使用它,因为我没有使用专用服务器.. - Jayyrus
您不需要专用服务器来使用它。虚拟主机已经足够,尽管您可能需要与托管公司合作。 - deed02392

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接