我正在尝试创建一个用node.js编写的WebSocket服务器
为了让服务器工作,我需要得到一个字符串的SHA1哈希值。
我必须做的事情在文档第35页的第5.2.2节中解释。
注意事项:例如,如果客户端握手中"Sec-WebSocket-Key"
头的值为"dGhlIHNhbXBsZSBub25jZQ=="
,服务器将附加字符串"258EAFA5-E914-47DA-95CA-C5AB0DC85B11"
以形成字符串"dGhlIHNhbXBsZSBub25jZQ==258EAFA5-E914-47DA-95CA-C5AB0DC85B11"
。然后服务器将获取此字符串的SHA-1哈希值。给出值0xb 3 0x 7a 0x 4f 0x 2c 0xc 0 0x 62 0x 4f 0x 16 0x 90 0xf 6 0x 46 0x 06 0xcf 0x 38 0x 59 0x 45 0xb 2 0xbe 0xc 4 0xea.然后对该值进行base64编码,以给予值"s3pPLMBiTxaQ9kYGzzhZRbK+xOo="
,其将在"Sec-WebSocket-Accept"
报头中返回。
6条答案
按热度按时间t9aqgxwy1#
请参阅
crypto.createHash()
函数以及相关的hash.update()
和hash.digest()
函数:qzlgjiam2#
义务:SHA1坏了,你可以compute SHA1 collisions for 45,000 USD (and even less since this answer was written) .你应该使用
sha256
:要回答您的问题并生成SHA1哈希,请执行以下操作:
然后道:
或
或
crypto.createHash()
上的正式节点文档disbfnqx3#
防止问题(错误哈希)的提示:
我体验到NodeJS是对字符串的UTF-8表示进行散列,而其他语言(如Python、PHP或PERL...)则是对字节字符串进行散列。
我们可以添加 binary 参数来使用字节字符串。
您可以尝试:“、”、“、”、“、”等等...“
其他语言(Python、PHP等):
节点:
j7dteeu84#
您可以用途:
对于安装:
daolsyd05#
请阅读并认真考虑我在你的帖子评论中的建议。话虽如此,如果你仍然有很好的理由这样做,请查看Node的加密模块列表。它有处理sha1和base64的模块。
w8f9ii696#
使用Node v15中添加的新的浏览器兼容、零依赖的SubtleCrypto API进行应答
节点沙盒:https://runkit.com/hesygolu/61564dbee2ec8600082a884d
资料来源: