#1949. 网络通讯系统

网络通讯系统

当前没有测试数据。

问题背景

描述问题的背景,没有请删除

问题描述

在一个网络通信系统中,需要对传输的数据进行加密、解密和完整性校验。数据以结构体的形式组织,每个数据块包含以下信息:

  • ​**数据标识(id)**​:一个 16 位的无符号整数,用于唯一标识该数据块。
  • ​**数据内容(content)**​:一个长度不固定的字符数组,存储实际的数据,以 '\0' 结尾,但最长不超过 255 字节。
  • ​**校验码(checksum)**​:一个 32 位的无符号整数,通过特定的校验算法生成,用于验证数据的完整性。

定义一个共用体来辅助数据的加密处理:

  • 加密模式 1​:使用一个 64 位的无符号整数 encryptedData1,将数据标识和数据内容的前 8 个字节(假设数据内容足够长)合并后进行加密存储(加密算法自行设计,简单的异或操作等均可,这里重点考察数据处理逻辑)。
  • 加密模式 2​:使用两个 32 位的无符号整数 encryptedData2encryptedData3,将数据标识的高 8 位和低 8 位分别与数据内容的某些字节进行组合加密存储(具体组合方式自行设计,但要保证能够还原)。

实现以下功能:

  1. 加密函数​:接受一个数据块结构体指针和加密模式(1 或 2)作为参数,根据选择的加密模式对数据进行加密,并更新结构体中的相关成员为加密后的数据。
  2. 解密函数​:接受一个加密后的数据块结构体指针和加密模式(1 或 2)作为参数,根据加密模式对数据进行解密,还原出原始的数据标识和数据内容,并更新结构体中的相关成员。
  3. 校验函数​:接受一个数据块结构体指针作为参数,重新计算数据的校验码,并与结构体中存储的校验码进行比较,返回比较结果(相同返回 1,不同返回 0)。

注意事项

  • 在处理数据内容时,要确保不越界访问内存。
  • 加密和解密过程中要保证数据的完整性和准确性,即加密后能正确解密回原始数据。
  • 对于校验码的计算,可以采用简单的累加或异或等算法,但要保证其能一定程度上检测数据的完整性。