Skip to main content

5. Data Type Representations Used in the SSH Protocols (SSH 协议中使用的数据类型表示)

5. Data Type Representations Used in the SSH Protocols (SSH 协议中使用的数据类型表示)

byte

一个 byte 表示任意 8 位值 (八位组, octet).固定长度数据有时表示为字节数组, 写为 byte[n], 其中 n 是数组中的字节数.

boolean

一个 boolean 值存储为单个字节.值 0 表示 FALSE, 值 1 表示 TRUE.所有非零值必须被解释为 TRUE; 但是, 应用程序不得存储除 0 和 1 之外的值.

uint32

表示一个 32 位无符号整数.以递减重要性顺序 (网络字节顺序, network byte order) 存储为四个字节.例如: 值 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

表示以二进制补码格式 (two's complement format) 的多精度整数, 存储为字符串, 每字节 8 位, MSB 在前.负数的数据分区第一个字节的最高有效位的值为 1.如果正数的最高有效位将被设置, 则该数字必须在前面加上一个零字节.不得包含值为 0 或 255 的不必要的前导字节.值零必须存储为零字节数据的字符串.

按照惯例, 在 Z_n 中用于模运算的数字应该表示在范围 0 <= x < n 中.

示例:

value (hex)        representation (hex)
----------- --------------------
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 中名称的顺序可能重要也可能不重要.同样, 这取决于使用列表的上下文.终止空字符不得使用, 无论是对于各个名称还是对于整个列表.

示例:

value                      representation (hex)
----- --------------------
(), the empty 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