Websocket的Key多少个字节

在WebSocket协议中,握手过程中的Sec-WebSocket-Key是一个由客户端生成的随机字符串,用于安全地建立WebSocket连接。这个Sec-WebSocket-Key是基于Base64编码的,并且通常由客户端在WebSocket握手请求的头部字段中发送。根据WebSocket协议规范(RFC 6455),Sec-WebSocket-Key的长度应该是16字节(128位)。

生成过程
客户端生成:客户端首先生成一个随机的16字节(128位)的密钥。这个密钥可以是任何随机生成的字节序列。

Base64编码:然后,这个16字节的随机数被编码为Base64字符串。Base64编码会将原始的二进制数据转换为ASCII字符串,使得这些数据可以通过文本传输。由于16字节可以表示为128位,转换成Base64编码后,长度会增加大约33%。因此,编码后的字符串长度大约为24字节 (在大多数实现中,不包括填充字符=)。

发送:客户端将这个Base64编码的字符串放在HTTP头部字段Sec-WebSocket-Key中,并发送给服务器。

示例

例如,一个16字节随机数(二进制表示)可能是:

0xb3 0x7a 0x4f 0x2c 0xc0 0x65 0x22 0xf9 0x39 0x87 0x79 0x09 0xb4 0x84 0x5e 0xf8

将其转换为Base64编码后,得到:

b7pPwmFmJSIvnxmZjRg=

这个Base64字符串就是Sec-WebSocket-Key的值,长度大约为24字节。

注意事项

填充:在一些实现中,Base64编码后的字符串可能包含**=字符作为填充,以确保编码后的字符串长度是4的倍数**。但在大多数情况下,WebSocket握手请求中使用的Base64编码不包括这些填充字符。

服务器响应:服务器在接收到客户端的Sec-WebSocket-Key后,会生成一个类似的响应头部字段Sec-WebSocket-Accept ,该字段的值是通过将客户端的Sec-WebSocket-Key值与一个特定的GUID字符串(258EAFA5-E914-47DA-95CA-C5AB0DC85B11)进行连接,然后对整个结果进行SHA-1哈希,最后将哈希值再进行Base64编码得到的。这个过程确保了双方都能安全地验证对方的身份,并建立加密的WebSocket连接。

总结,Sec-WebSocket-Key应该是16字节(128位),但在实际应用中通过Base64编码后通常表示为大约24字节的字符串。

SHA-1生成的摘要长度为‌20字节‌(160位),通常以40个十六进制字符表示。 ‌

核心信息

  • 160位‌:SHA-1算法将输入数据转换为固定长度的160位二进制输出,对应20字节。 ‌
  • 十六进制表示 ‌:由于每个十六进制字符占用4位,因此最终呈现为40个十六进制字符(如abcdef...)。 ‌
  • 安全性问题‌:由于存在安全漏洞,SHA-1已被逐步淘汰,当前更推荐使用SHA-2或SHA-3算法。
相关推荐
淼澄研学16 小时前
Kimi API黑产倒卖技术解析与Python合规接入指南
开发语言·网络·python
SendTomo17 小时前
P2P文件传输工具对比:SendTomo vs send.wang
javascript·网络协议·webrtc·html5·p2p
qyyyyy57017 小时前
英文技术标准和协议规范怎么读?RFC、接口规范与安全标准 PDF 翻译流程
网络协议·网络安全·机器翻译·csrf·技术美术
无锡耐特森17 小时前
Profinet转ModbusTCP协议网关:数字化工厂跨协议互联
网络
MartinYeung518 小时前
[论文学习]ProAct:针对LLM越狱的主动防禦框架
网络·学习·安全
发量惊人的中年网工18 小时前
中小企业网络管理进阶:从设备堆叠到统一管理
服务器·网络·安全·网络安全·php·制造
workflower19 小时前
案例 :某交通厅基于AI技术的智能安全运营实践
网络·人工智能·安全·设计模式·机器人
SendTomo19 小时前
WebRTC文件互传工具实测对比
javascript·网络·webrtc·html5·p2p
运维全栈笔记19 小时前
致远 OA HTTPS 配置避坑指南
网络协议·http·https
测开小菜鸟20 小时前
智能体安全与伦理测试:守护AI的“底线”,让智能体安全、负责任地工作
网络·人工智能·安全