如何在node.js中获取字符串的sha1哈希值?

时间:2011-08-08 15:02:52

标签: javascript node.js websocket

我正在尝试创建一个用node.js

编写的websocket服务器

要使服务器正常工作,我需要获取字符串的SHA1哈希值。

我需要做的事情在Section 5.2.2 page 35 of the docs中解释。

  

注意:例如,如果"Sec-WebSocket-Key"的值   客户端握手中的标头是"dGhlIHNhbXBsZSBub25jZQ==",服务器会附加字符串"258EAFA5-E914-47DA-95CA-C5AB0DC85B11"以形成   字符串"dGhlIHNhbXBsZSBub25jZQ==258EAFA5-E914-47DA-95CA-C5AB0DC85B11"。然后服务器将获取该字符串的SHA-1哈希值,给出值0xb3 0x7a 0x4f 0x2c 0xc0 0x62 0x4f 0x16 0x90 0xf6 0x46 0x06 0xcf 0x38 0x59 0x45 0xb2 0xbe 0xc4 0xea。然后对该值进行base64编码,以提供将返回的值"s3pPLMBiTxaQ9kYGzzhZRbK+xOo="   在"Sec-WebSocket-Accept"标题中。

5 个答案:

答案 0 :(得分:211)

查看crypto.createHash() function以及相关的hash.update()hash.digest()函数:

var crypto = require('crypto')
  , shasum = crypto.createHash('sha1');
shasum.update("foo");
console.log(shasum.digest('hex'));
// "0beec7b5ea3f0fdbc95d0dd47f3c5bc275da8a33"

答案 1 :(得分:21)

强制性:SHA1已被破坏,您可以与普通创业加速器群组的AWS信用额发生冲突,但要回答您的问题:

var getSHA1ofJSON = function(input){
    return crypto.createHash('sha1').update(JSON.stringify(input)).digest('hex')
}

然后:

getSHA1ofJSON('whatever')

getSHA1ofJSON(['whatever'])

getSHA1ofJSON({'this':'too'})

答案 2 :(得分:8)

请阅读并在帖子的评论中强烈考虑我的建议。话虽这么说,如果您还有充分的理由这样做,请查看节点的crpyto模块的this listing。它有用于处理sha1和base64的模块。

答案 3 :(得分:4)

防止问题的提示(错误哈希):

  

我经历过NodeJS正在散列字符串的UTF-8表示。其他语言(如Python,PHP或PERL ...)正在对字节字符串进行哈希处理。

我们可以添加 binary 参数来使用字节字符串。

const crypto = require("crypto");

function sha1(data) {
    return crypto.createHash("sha1").update(data, "binary").digest("hex");
}

sha1("Your text ;)");

您可以尝试:" \ xac"," \ xd1"," \ xb9"," \ xe2",&# 34; \ xbb"," \ x93"等...

其他语言(Python,PHP,...):

sha1("\xac") //39527c59247a39d18ad48b9947ea738396a3bc47

的NodeJS:

sha1 = crypto.createHash("sha1").update("\xac", "binary").digest("hex") //39527c59247a39d18ad48b9947ea738396a3bc47
//without:
sha1 = crypto.createHash("sha1").update("\xac").digest("hex") //f50eb35d94f1d75480496e54f4b4a472a9148752

答案 4 :(得分:2)

您可以使用:

  const sha1 = require('sha1');
  const crypt = sha1('Text');
  console.log(crypt);

要安装:

  sudo npm install -g sha1
  npm install sha1 --save