Encryption 通过SSL发送整数而不是字符串以节省带宽是一个好主意吗?
我正在创建一个客户端服务器设计的应用程序。客户端和服务器通过WebSocket以二进制消息(CBOR数组)的形式发送数据,从而相互通信。我没有发送字符串,而是创建了一个用整数映射的字典,如下所示:Encryption 通过SSL发送整数而不是字符串以节省带宽是一个好主意吗?,encryption,ssl,websocket,Encryption,Ssl,Websocket,我正在创建一个客户端服务器设计的应用程序。客户端和服务器通过WebSocket以二进制消息(CBOR数组)的形式发送数据,从而相互通信。我没有发送字符串,而是创建了一个用整数映射的字典,如下所示: const DICT: &[&str] = &[ "USERNAME_NOT_AVAILABLE", "USERNAME_AND_PASSWORD_DID_NOT_MATCHED", ....blablba lon
const DICT: &[&str] = &[
"USERNAME_NOT_AVAILABLE",
"USERNAME_AND_PASSWORD_DID_NOT_MATCHED",
....blablba long list ....
];
// genrates code like this:-
// pub const USERNAME_AND_PASSWORD_DID_NOT_MATCHED : u16 = 4;
fn gen_rust(version: &String) -> String {
let mut code = format!(
"//generated code from Examer server version {}\n\n",
version
);
for (index, element) in DICT.iter().enumerate() {
code.push_str(&format!("pub const {} : u16 = {};\n", element, index))
}
code
}
生成的字典然后在客户端和服务器之间共享,我发送整数而不是字符串
如果我经常犯拼写错误,这种方法确实提供了自动补全和编译时错误等好处,但这会减少使用SSL加密时的消息大小吗?我听说,如果消息太小,则会添加填充,因此我减少消息大小的主要目标将无法实现。现代TLS密码套件(TLS 1.3中唯一可用的密码套件,也是HTTP/2中唯一允许的密码套件)不使用填充。这是因为AES-GCM和ChaCha20-Poly1305基于CTR,而非CBC 请注意,(过时的)CBC密码套件中的填充每个消息最多16字节,通常被认为是无关紧要的 请注意,websocket的帧、TLS记录和MAC的帧都是无法消除的带宽开销。您不能只发送原始的CBOR值,而使用一些保留长度的加密进行加密
您应该使用wireshark来观察应用程序发送消息时实际发送的数据量。您甚至不清楚使用TLS发送的是什么消息。假设您在一条消息中发送100个值,其中每个值在映射到整数之前为100字节,如果表示为整数,则仅为2字节,那么消息显然要小得多。如果仅将单个3字节字符串映射为2字节整数,则任何差异都与此无关,因为所有其他协议层的开销占主导地位。