hash函数是一种单向散列算法,这意味着从明文可以得到散列值,而散列值不可以还原为明文。
验证密码的方法是将用户输入的密码与盐值按照加密时使用的hash算法再hash一次,并与数据库中存储的hash值作比较,若两者一致则认为密码正确。
以前java项目最近打算用node.js重写,但是加密这里实在没搞定。java中加密是:1024次加盐sha-1加密,一个例子:salt:47998d63768aa877,密文:bef36ba826b045a7c5e536a2f7131a6c232eee36,明文:yunstudio2013
下面是java代码:
private static byte[] digest(byte[] input, String algorithm, byte[] salt, int iterations) {
try {
MessageDigest digest = MessageDigest.getInstance(algorithm)
if (salt != null) {
digest.update(salt)
}
byte[] result = digest.digest(input)
for (int i = 1i <iterationsi++) {
digest.reset()
result = digest.digest(result)
}
return result
} catch (GeneralSecurityException e) {
throw Exceptions.unchecked(e)
}
}
我在js里面是这么干的,但是结果一直不对,代码如下:
//bef36ba826b045a7c5e536a2f7131a6c232eee36
var hash = crypto.createHmac("sha1", “47998d63768aa877”).update(“yunstudio2013”).digest(“hex”)
for (var i = 1i <1024i++) {
hash = crypto.createHmac("sha1", “47998d63768aa877”).update(hash).digest(“hex”)
console.log(hash)
}