WEB开发网
开发学院WEB开发Xml 网络传输中 XML 敏感信息的加密 阅读

网络传输中 XML 敏感信息的加密

 2010-10-22 17:18:25 来源:WEB开发网   
核心提示: 这样,经过加密机制的处理,网络传输中 XML 敏感信息的加密(3),敏感信息 password 的内容以加密后的形式呈现, 现在开始,设置值为(0xDEADC0DE)UINT8version;//头部版本(以0开始)UINT8reserved1;//保留位UINT16offset;//从开始到有

这样,经过加密机制的处理,敏感信息 password 的内容以加密后的形式呈现。 现在开始,将分步介绍本文对敏感信息的加密和解密机制,以了解上述 XML 文件中敏感信息 password 的加密值是如何得到的。主要步骤可分为数据对齐及初步保护,加密算法的密钥选取,加密内容的十六进制字符串呈现,以及相应的解密方法。下面以客户端加密、服务器端解密为例进行说明。因为加密和加密过程在客户端和服务器端是一致的 , 所以逆向加解密,即服务器端加密、客户端解密的过程与此类似。

加密过程

Step 1.1. 敏感信息的 Pack 操作,对齐字节并对数据进行初步保护

因为 AES 算法是一种分组算法,而且每个分组必须是 32 位的整数倍,并且最小值为 128 位,我们需要对加密的数据进行 数据对齐,这里采用 16 字节即 128 位对齐。并且,为了保证数据的完整性,对数据加入头部和尾部,其中头部和尾部都有 标识符来表征数据的完整性。以上整个过程我们称之为 Pack 操作。

一旦该数据被意外截断,就可以通过头尾部检测到,无论发送方还是接收方都会丢弃此类数据,以保证系统安全。以下是 Pack 操作的具体步骤:

读取用户提供的需要加密的内容,对 password 的实际值 PASSWORD 进行 Pack 操作,使用到的数据结构参见 清单 3中的示例。数据在 Pack 操作后呈现的结构如 图 1所示:

清单 3. 头部结构的定义

 struct DataHeader { 
 #pragma pack(push, 1) // 使结构体 1 字节对齐 
  UINT32  canary1;  // 标识,用于检测数据是否截断,设置值为 (0xDEADC0DE) 
  UINT8  version;  // 头部版本(以 0 开始) 
  UINT8  reserved1; // 保留位 
  UINT16  offset;  // 从开始到有效负载数据的偏移量(头部长度) 
  UINT32  size;   // 有效负载数据的长度 
  UINT16  reserved2; // 保留位 
  UINT8  reserved3; // 保留位 . 
  UINT8  UIDsize;  // UID 的长度 
 #pragma pack(pop) 
 } header; 
 // 备注 : 接下来的两个字段可以根据实际需要设置 
 //    文件的其余部分结构如下设置 
 // char[]  UID;    // UID 指每次会话的 SessionID(不含结尾的 NULL 符) 
 // UINT8[] payload;  // 需要传输的数据,即有效负载数据 
 // UINT32  canary2;  // 标识,用于检测数据是否截断,设置值为 (0xDEADC0DE) 

上一页  1 2 3 4 5 6 7  下一页

Tags:网络传输 XML 敏感

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接