5. SSH 协议中使用的数据类型表示
- SSH 协议中使用的数据类型表示
byte
byte 表示任意 8 位值 (八位字节). 固定长度数据有时表示为字节数组,
写作 byte[n], 其中 n 是数组中的字节数.
RFC 4251 SSH Protocol Architecture January 2006
boolean
boolean 值存储为单个字节. 值 0 表示 FALSE, 值 1 表示 TRUE.
所有非零值都必须解释为 TRUE; 但是, 应用禁止存储 0 和 1 之外的值.
uint32
表示 32 位无符号整数. 按重要性递减的顺序存储为四个字节
(网络字节序). 例如: 值 699921578 (0x29b7f4aa) 存储为
29 b7 f4 aa.
uint64
表示 64 位无符号整数. 按重要性递减的顺序存储为八个字节
(网络字节序).
string
任意长度的二进制字符串. 字符串允许包含任意二进制数据, 包括空字符和
8 位字符. 它们存储为一个包含其长度 (后续字节数) 的 uint32,
后跟零个 (= 空字符串) 或多个构成字符串值的字节. 不使用终止空字符.
字符串也用于存储文本. 在这种情况下, 内部名称使用 US-ASCII,
可能显示给用户的文本使用 ISO-10646 UTF-8. 通常不应在字符串中
存储终止空字符. 例如: US-ASCII 字符串 "testing" 表示为
00 00 00 07 t e s t i n g. UTF-8 映射不会改变 US-ASCII 字符的编码.
mpint
表示二进制补码格式的多精度整数, 作为字符串存储, 每字节 8 位,
最高有效字节 (MSB) 在前. 对于负数, 数据部分第一个字节的最高有效位
值为 1. 如果正数的最高有效位会被置位, 则该数前面必须加一个零字节.
禁止包含值为 0 或 255 的不必要前导字节. 值零必须存储为包含零个
数据字节的字符串.
按约定, 在 Z_n 中用于模运算的数字应当表示在范围
0 \<= x \< n 内.
RFC 4251 SSH Protocol Architecture January 2006
示例:
值 (十六进制) 表示 (十六进制)
-------------- ----------------
0 00 00 00 00
9a378f9b2e332a7 00 00 00 08 09 a3 78 f9 b2 e3 32 a7
80 00 00 00 02 00 80
-1234 00 00 00 02 ed cc
-deadbeef 00 00 00 05 ff 21 52 41 11
name-list
包含逗号分隔名称列表的字符串. name-list 表示为一个包含其长度
(后续字节数) 的 uint32, 后跟由逗号分隔的零个或多个名称.
名称必须具有非零长度, 并且禁止包含逗号 (","). 由于这是名称列表,
其中包含的所有元素都是名称, 并且必须使用 US-ASCII. 上下文可能
对名称施加额外限制. 例如, name-list 中的名称可能必须是有效算法
标识符列表 (见下文第 6 节), 或 [RFC3066] 语言标签列表.
name-list 中名称的顺序可能重要, 也可能不重要. 这同样取决于列表
使用时的上下文. 禁止使用终止空字符, 无论是单个名称还是整个列表.
示例:
值 表示 (十六进制)
-- ----------------
(), 空 name-list 00 00 00 00
("zlib") 00 00 00 04 7a 6c 69 62
("zlib,none") 00 00 00 09 7a 6c 69 62 2c 6e 6f 6e 65