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="

        代码验证(Java示例):

        1. 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

          }

          }

        2. 输出结果

          复制代码
          Decoded Key Length: 16 bytes
          Sec-WebSocket-Accept Length: 28 bytes

          关键点总结:

        3. Sec-WebSocket-Key:客户端发送的Base64字符串,解码后固定为16字节。

        4. Sec-WebSocket-Accept:服务器计算的Base64字符串,编码后固定为28字节。

        5. 协议依据:RFC 6455(WebSocket协议标准)

相关推荐
weixin_604236671 小时前
华三 路由器 极简核心配置
运维·服务器·网络·h3c·h3c路由器
换个昵称都难5 小时前
webrtc 音频模块FEC模块
网络·音视频·webrtc
youngerwang5 小时前
【从搬运工到协处理器:网卡芯片架构、算法、验证与边缘演进深度剖析】
网络·算法·架构·芯片
zjun10016 小时前
TCP专栏-4.四次挥手
网络协议·tcp/ip
天天进步20157 小时前
Tunnelto 源码解析 #9:控制服务器设计:Warp、WebSocket、Ping/Pong 与连接保活
运维·服务器·websocket
智慧光迅AINOPOL8 小时前
校园在线巡课系统方案:督导全覆盖
网络·全光网解决方案·全光网·校园全光网·校园全光网解决方案
酉鬼女又兒8 小时前
零基础入门计算机网络:网络层核心任务、三大关键问题、两种服务类型与 TCP/IP 网际层协议体系全解析
服务器·网络·网络协议·tcp/ip·计算机网络·php·求职招聘
Urbano8 小时前
工装制作全流程科普:从面料到自动化生产
网络·人工智能
2401_868534788 小时前
网规笔记 | 真题解析:2018年11月软考网规-网络安全案例分析
网络
Gauss松鼠会9 小时前
【GaussDB】GaussDB重要通信参数汇总
服务器·网络·数据库·sql·性能优化·gaussdb·经验总结