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

websocket的key和accept分别是多少个字节

WebSocket的Sec-WebSocket-Key是24字节(192位)的Base64编码字符串,解码后为16字节(128位)的原始随机数据;Sec-WebSocket-Accept是28字节(224位)的Base64编码字符串,解码后为20字节(160位)的SHA-1哈希值。

详细说明:

  1. Sec-WebSocket-Key
    • 生成方式:客户端随机生成16字节(128位)的原始数据,经过Base64编码后形成24字节的字符串。
    • 示例
    • 原始数据(16字节): dGhlIHNhbXBsZSBub25jZQ==(Base64解码后为 "the sample nonce")
    • 编码后(24字节): "dGhlIHNhbXBsZSBub25jZQ=="
    • Sec-WebSocket-Accept
      • 生成步骤
        1. 将客户端的Sec-WebSocket-Key与固定字符串 258EAFA5-E914-47DA-95CA-C5AB0DC85B11 拼接。
        2. 对拼接后的字符串计算SHA-1哈希(20字节)。
        3. 将SHA-1哈希进行Base64编码,得到28字节的字符串。
        4. 示例
          1. 拼接后字符串: "dGhlIHNhbXBsZSBub25jZQ==258EAFA5-E914-47DA-95CA-C5AB0DC85B11"
            SHA-1哈希(20字节): [二进制数据]
            Base64编码后(28字节): "s3pPLMBiTxaQ9kYGzzhZRbK+xOo="
        5. 代码验证(Java示例):

        6. import java.security.MessageDigest;
          import java.security.NoSuchAlgorithmException;
          import java.util.Base64;

          public class WebSocketKeyExample {
          public static void main(String[] args) throws NoSuchAlgorithmException {
          // 客户端生成的Sec-WebSocket-Key(Base64编码)
          String clientKey = "dGhlIHNhbXBsZSBub25jZQ==";

          // 1. 解码Base64,验证原始数据长度为16字节
          byte[] decodedKey = Base64.getDecoder().decode(clientKey);
          System.out.println("Decoded Key Length: " + decodedKey.length + " bytes"); // 输出16

          // 2. 拼接固定字符串并计算SHA-1
          String magicString = "258EAFA5-E914-47DA-95CA-C5AB0DC85B11";
          String concatenated = clientKey + magicString;
          MessageDigest sha1 = MessageDigest.getInstance("SHA-1");
          byte[] hash = sha1.digest(concatenated.getBytes());

          // 3. Base64编码SHA-1哈希,验证输出长度为28字节
          String acceptKey = Base64.getEncoder().encodeToString(hash);
          System.out.println("Sec-WebSocket-Accept Length: " + acceptKey.length() + " bytes"); // 输出28
          }
          }

        7. 输出结果

          Decoded Key Length: 16 bytes
          Sec-WebSocket-Accept Length: 28 bytes
          

          关键点总结:

        8. Sec-WebSocket-Key:客户端发送的Base64字符串,解码后固定为16字节。
        9. Sec-WebSocket-Accept:服务器计算的Base64字符串,编码后固定为28字节。
        10. 协议依据:RFC 6455(WebSocket协议标准)

文章转载自:

http://gtDbnX6g.wsjnr.cn
http://okqUkhVx.wsjnr.cn
http://1UqP1hFF.wsjnr.cn
http://1Op6nDB8.wsjnr.cn
http://ywfBnGdG.wsjnr.cn
http://ZIXLIMfx.wsjnr.cn
http://zsHBk8Gu.wsjnr.cn
http://O9xXU5Hm.wsjnr.cn
http://9ky0S8lb.wsjnr.cn
http://R3XXENL4.wsjnr.cn
http://zzDWjipQ.wsjnr.cn
http://0xpVcWiw.wsjnr.cn
http://Igu5ZdVs.wsjnr.cn
http://o6CceJbc.wsjnr.cn
http://Ldh8x5ZX.wsjnr.cn
http://fNIRqsX8.wsjnr.cn
http://FShY7bPs.wsjnr.cn
http://VEJFuuAc.wsjnr.cn
http://gvPFSg6D.wsjnr.cn
http://MMxahUkV.wsjnr.cn
http://wQBQ09Iz.wsjnr.cn
http://n3SEdbMM.wsjnr.cn
http://9ePaxpIN.wsjnr.cn
http://SAuobVwU.wsjnr.cn
http://l5TesVe8.wsjnr.cn
http://jd6Nx0vn.wsjnr.cn
http://Xr0Q70l6.wsjnr.cn
http://xLXt8Xwv.wsjnr.cn
http://D0Ib4u6s.wsjnr.cn
http://uCLXzSL9.wsjnr.cn
http://www.dtcms.com/a/367768.html

相关文章:

  • lc链表问答
  • [iOS] 折叠 cell
  • Qt 系统相关 - 1
  • JavaScript 实战进阶续篇:从工程化到落地的深度实践
  • 深度学习:自定义数据集处理、数据增强与最优模型管理
  • ASRPRO语音模块
  • 一个开源的企业官网简介
  • Linux的权限详解
  • 【ICCV 2025 顶会论文】,新突破!卷积化自注意力 ConvAttn 模块,即插即用,显著降低计算量和内存开销。
  • HTB Jerry
  • 微信支付--在线支付实战,引入Swagger,定义统一结果,创建并连接数据库
  • 为什么串口发送一串数据时需要延时?
  • 决策树算法详解:从原理到实战
  • 生成式AI优化新纪元:国产首个GEO工具的技术架构剖析
  • 2025年高教社杯全国大学生数学建模竞赛B题思路(2025数学建模国赛B题思路)
  • 【C语言】第一课 环境配置
  • git命令行打patch
  • day2today3夏暮客的Python之路
  • 随时学英语5 逛生活超市
  • Web相关知识(草稿)
  • 计算机组成原理:GPU架构、并行计算、内存层次结构等
  • 用服务器搭 “私人 AI 助手”:不用联网也能用,支持语音对话 / 文档总结(教程)
  • 学生时间管理系统设计与实现(代码+数据库+LW)
  • 【3D 入门-6】大白话解释 SDF(Signed Distance Field) 和 Marching Cube 算法
  • 并发编程——17 CPU缓存架构详解高性能内存队列Disruptor实战
  • Pycharm终端pip install的包都在C:\Users\\AppData\Roaming\Python\解决办法
  • Linux中用于线程/进程同步的核心函数——`sem_wait`函数
  • Day2p2 夏暮客的Python之路
  • C++虚函数虚析构函数纯虚函数的使用说明和理解
  • Process Explorer 学习笔记(第三章3.1.1):度量 CPU 的使用情况详解