我在跟踪rfc6455
具体而言,如果如上面的示例所示,则是\Sec-WebSocket-Key= 标头字段的值为"dGhlIHNhbXBsZSBub25jZQ==",服务器 将字符串"258EAFA5-E914-47DA-95CA-C5AB0DC85B11“连接起来 以形成字符串"dGhlIHNhbXBsZSBub25jZQ==258EAFA5-E914-47DA-95CA- 然后服务器将接受SHA-1散列, 给出0xb3 0x7a 0x4f 0x2c 0xc0 x62 0x4f 0x16 0x90 0xf6的值。 0x46 0x06 0xcf 0x38 0x59 0x45 0xb2 0xbe 0xc4 0xea。这个值是 然后将base64 64编码(参见RFC4648第4节),以给出值 "s3pPLMBiTxaQ9kYGzzhZRbK+xOo=“。然后,这个值将被回溯到 Sec-WebSocket-Accept\ header字段。
而无法生成正确的"Sec-WebSocket-Accept“。
为了理解这个过程,我使用了在线SHA1散列和Base64编码。
"dGhlIHNhbXBsZSBub25jZQ==258EAFA5-E914-47DA-95CA-C5AB0DC85B11“的联机SHA1散列给出了正确的结果: rfc6455中描述的"b37a4f2cc0624f1690f64606cf385945b2bec4ea”。
但是,"YjM3YTRmMmNjMDYyNGYxNjkwZjY0NjA2Y2YzODU5NDViMmJlYzRlYQ==“输入"b37a4f2cc0624f1690f64606cf385945b2bec4ea”时,联机Base64编码给了我错误的结果。结果应该是"s3pPLMBiTxaQ9kYGzzhZRbK+xOo=“
我做错了什么?
发布于 2016-03-14 14:14:53
您需要对原始sha1摘要进行base64 64编码。
您正在编码摘要的十六进制字符串表示形式,它是长度的两倍。
在线工具处理文本,而不处理原始二进制数据,这就是为什么您得到了错误的结果。
Python 2示例:
import hashlib, base64
h = hashlib.sha1("dGhlIHNhbXBsZSBub25jZQ==258EAFA5-E914-47DA-95CA-C5AB0DC85B11")
print "hexdigest:", h.hexdigest() # hexadecimal string representation of the digest
print "digest:", h.digest() # raw binary digest
print
print "wrong result:", base64.b64encode(h.hexdigest())
print "right result:", base64.b64encode(h.digest())这些指纹:
hexdigest: b37a4f2cc0624f1690f64606cf385945b2bec4ea
digest: ᄈzO,ÀbOミöFÏ8YEᄇᄒÄê
wrong result: YjM3YTRmMmNjMDYyNGYxNjkwZjY0NjA2Y2YzODU5NDViMmJlYzRlYQ==
right result: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=Python 3示例:
import hashlib, base64
h = hashlib.sha1(b"dGhlIHNhbXBsZSBub25jZQ==258EAFA5-E914-47DA-95CA-C5AB0DC85B11")
print("hexdigest:", h.hexdigest()) # hexadecimal string representation of the digest
print("digest:", h.digest()) # raw binary digest
print()
print("wrong result:", base64.b64encode(h.hexdigest().encode()).decode())
print("right result:", base64.b64encode(h.digest()).decode())这些指纹:
hexdigest: b37a4f2cc0624f1690f64606cf385945b2bec4ea
digest: b'\xb3zO,\xc0bO\x16\x90\xf6F\x06\xcf8YE\xb2\xbe\xc4\xea'
wrong result: YjM3YTRmMmNjMDYyNGYxNjkwZjY0NjA2Y2YzODU5NDViMmJlYzRlYQ==
right result: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=https://stackoverflow.com/questions/35977916
复制相似问题