当前位置: 首页 > news >正文

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算法。
http://www.xdnf.cn/news/1456597.html

相关文章:

  • 【Big Data】云原生与AI时代的存储基石 Apache Ozone 的技术演进路径
  • 深度学习篇---SENet网络结构
  • 【C语言】第二课 基础语法
  • 【开题答辩全过程】以 基于微信小程序的宠物领养系统为例,包含答辩的问题和答案
  • 理解 C# `async` 的本质:从同步包装到状态机
  • 云手机与网络游戏相结合的优势?
  • AI大模型企业落地指南-笔记05
  • 【75】OpenCV C++实战篇——OpenCV 图像拼接、全景拼接(教程合集)
  • 【华为培训笔记】ASON原理
  • 关于嵌入式学习——嵌入式硬件3
  • 如何在MacOS上卸载并且重新安装Homebrew
  • 企业微信SCRM工具推荐:微盛AI·企微管家为什么是首选?
  • c#泛型公共类示例
  • Next.js App Router 中文件系统路由与页面跳转实践(以用户详情页面为例)
  • 1688拍立淘接口对接实战案例
  • Playwright-ui自动化工具
  • 如何设置PPTX的默认打开应用为PowerPoint
  • ​​AI生成PPT工具推荐,从此以后再也不用担心不会做PPT了​​
  • Effective Python 第10条 - 用赋值表达式减少重复代码
  • 股价暴跌后扔出 “王炸”,美团 LongCat 大模型到底是续命还是真有料?
  • Linux网络服务——基础设置
  • 【Kubernetes】知识点4
  • 吐槽一下福昕pdf阅读器高级专业版
  • git命令常用指南
  • openEuler2403安装部署Kafbat
  • 用遗传算法破解一元函数最大值问题:从原理到 MATLAB 实现
  • 关于多Agent协作框架的讨论:以产品经理工作流为例对比Sub Agent与AutoGen
  • 标注工具labelimg使用简介
  • 02-Media-4-mp4muxer.py 录制视频并保存为MP4文件的示例
  • 员工离职导致研发文档遗失的原因与防范方法