没有任何常见的JS库,如何在发送密码之前对其进行哈希处理?
<form>
<input type="password" id="pwd" name="password" />
<input onclick="
var val = document.getElementById('pwd').value;
document.getElementById('pwd').value(sha512(val));"
type="submit">
</form>
这将以某种方式成为我的天真方式(sha512是在某处创建sha512值的函数)
虽然它显然似乎不起作用。为什么?我该如何正确而简单地做到这一点?
答案 0 :(得分:3)
这里有很多问题......比如没有盐的哈希就可以成为彩虹。如果你发送然后存储他们制作的哈希...就像现在存储一个明文密码一样。如果客户端盐和哈希,然后服务器盐和哈希它...如何确保他们可以使用正确的盐再次哈希。最重要的是,使用安全连接,然后在服务器上使用salt / hash。
答案 1 :(得分:1)
我建议你使用jsSHA public sw并放在你的js:
之外function mySubmit(obj) {
var pwdObj = document.getElementById('pwd');
var hashObj = new jsSHA("SHA-512", "TEXT", {numRounds: 1});
hashObj.update(pwdObj.value);
var hash = hashObj.getHash("HEX");
pwdObj.value = hash;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jsSHA/2.0.2/sha.js"></script>
<form>
<input type="password" id="pwd" name="password" />
<input onclick="mySubmit(this)" type="submit">
</form>
答案 2 :(得分:1)
的document.getElementById( 'PWD')值(SHA512(VAL));
您的意思是value = sha512(val)
。
这会给你一个例外,其中包含一些有用的错误消息(例如value is not a function
),因此请保持JS控制台处于打开状态,以便您可以看到错误。
请注意,客户端密码散列通常是反模式,当然不能替代正确的SSL。
答案 3 :(得分:0)
我认为在客户端散列密码不是一个好主意。但您可以使用 CryptoJS
https://code.google.com/p/crypto-js/
<script src="http://crypto-js.googlecode.com/svn/tags/3.1.2/build/rollups/sha512.js"></script>
<script>
var hash = CryptoJS.SHA512("Message");
</script>
答案 4 :(得分:0)
在将密码发送到服务器之前在客户端上散列密码完全是胡说八道,
别把我的话当作理所当然,让我们找出原因:
客户端将哈希密码发送到服务器。 从攻击者的角度来看,仅需要散列即可获得登录名的访问权限(即,攻击者欺骗了散列中的散列,并使用它来获取对服务器的访问权限)。
这与客户端发送纯文本密码的情况完全相同。攻击者会欺骗明文密码并使用它登录。
因此,现在很清楚,在客户端对哈希进行哈希处理并不能缓解攻击者正在侦听您的传输密码的威胁情况。 通过使用安全连接(例如HTTPS)可以缓解这种威胁情况。
但是,散列密码仍然很重要:服务器应散列密码,并将其与数据库中存储的散列版本进行比较。还需要加盐,以减轻彩虹表攻击