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

2022-08-30 04:03:49

我正在尝试创建一个用node编写的websocket服务器.js

为了让服务器工作,我需要获取字符串的SHA1哈希。

我必须做的是在文档的第5.2.2节第35页中解释的

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


答案 1

请参阅 crypto.createHash() 函数以及关联的 hash.update()hash.digest() 函数:

var crypto = require('crypto')
var shasum = crypto.createHash('sha1')
shasum.update('foo')
shasum.digest('hex') // => "0beec7b5ea3f0fdbc95d0dd47f3c5bc275da8a33"

答案 2

强制性:SHA1 已损坏,您可以计算 45,000 美元的 SHA1 冲突。您应该使用:sha256

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

要回答您的问题并进行SHA1哈希,请执行以下操作:

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

然后:

getSHA256ofJSON('whatever')

getSHA256ofJSON(['whatever'])

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

Crypto.createHash() 的官方 node docs on crypto.createHash()