内存数据压缩与加密技术

在现代计算中,内存数据的处理变得越来越重要。随着数据量的增加和处理速度的要求,有效的内存数据压缩和加密技术变得至关重要。本文将介绍一种专注于内存数据压缩和加密的库,该库利用了.NET的GZip功能和7zip SDK的LZM算法,以及基于BlakeB压缩函数的加密实现。

压缩技术

压缩是数据存储和传输中的一项关键技术,它能够减少数据占用的空间,从而提高效率。在内存数据处理中,压缩同样重要。本文介绍的库提供了多种压缩算法,包括GZip和LZMA。GZip是.NET内置的压缩功能,而LZMA算法则是通过7zip SDK的C#实现提供的。这些算法能够高效地在内存中进行数据压缩和解压缩。

该库的压缩选项包括:

public enum CompressionAlgo { GZip_All, GZip1, GZip2, GZip4, GZip8, LZMA_All, LZMA1, LZMA2, LZMA4, LZMA8, None }

其中,数字1、2、4、8代表参与压缩的处理器数量。GZip_All和LZMA_All代表使用所有可用的机器处理器(通常等于8),因此LZMA_All和LZMA8具有相同的含义。

加密技术

数据的安全性是另一个重要的考虑因素。本文介绍的库引入了基于BlakeB压缩函数的快速流密码。BlakeB压缩函数是生成器的核心,它创建了与用户输入的密钥、盐值和分布值唯一对应的输出字节数组(填充)。

加密和解密的过程如下:

加密:明文(字节数组p)XOR填充 => 密文(字节数组x)

解密:密文(x)XOR填充 => 明文(p)

由于加密和解密函数都是通过XOR字节与填充来实现的,因此密码引擎包括了一个单一的函数Crypt,涵盖了这两种情况,并提供了流密码的实现。

BlakeB函数的修改

BlakeB函数的核心压缩功能由以下块组成:

v0 = v0 + v4 + m0; v12 = v12 ^ v0; v12 = ((v12 >> 32) | (v12 << (32))); v8 = v8 + v12; v4 = v4 ^ v8; v4 = ((v4 >> 24) | (v4 << (40))); v0 = v0 + v4 + m1; v12 = v12 ^ v0; v12 = ((v12 >> 16) | (v12 << (48))); v8 = v8 + v12; v4 = v4 ^ v8; v4 = ((v4 >> 63) | (v4 << (1)));

为了增加对手的难度,当前实现最初基于用户密码(密钥)、盐值和分布输入生成字节数组S[384]。这允许在压缩函数中使用以下模式:

int i = 0; v0 = v0 + v4 + m0; v12 = v12 ^ v0; v12 = RR(v12, S[i++]); v8 = v8 + v12; v4 = v4 ^ v8; v4 = RR(v4, S[i++]); v0 = v0 + v4 + m1; v12 = v12 ^ v0; v12 = RR(v12, S[i++]); v8 = v8 + v12; v4 = v4 ^ v8; v4 = RR(v4, S[i++]); ...

其中RR是右旋转函数:

private ulong RR(ulong x, byte n) { return (x >> n) | (x << (-n & 63)); }

因此,压缩函数利用了基于用户输入的密钥、盐值和分布的384个独特的位移数(字节),从而消除了计算中的任意常数。

Tango库

Tango库的Tang类是单一的入口点,提供了压缩、加密或两者兼有的接口。以下是构造函数的使用示例:

Tang tang1 = new Tang(CompressionAlgo.GZip1); // 使用1个处理器进行GZip压缩 Tang tang2 = new Tang(CompressionAlgo.LZMA8); // 使用8个处理器进行LZMA压缩 Tang tang3 = new Tang("key", "salt", "distr", 1); // 使用1个处理器进行加密 Tang tang4 = new Tang(key, salt, distr); // 使用所有处理器进行加密

Tang类还提供了使用MemoryStream输入参数而不是字节数组的函数。

性能测量

以下是在i7 2GHz 64位8核PC上的性能测量结果:

压缩时间、压缩率:

  • GZip1: 1259毫秒,25.52%
  • GZip8: 303毫秒,25.61%
  • LZMA1: 30995毫秒,18.41%
  • LZMA8: 6124毫秒,19.83%

加密时间(单核):

  • 1核心: 903毫秒,100%
  • 2核心: 457毫秒,50.6%
  • 4核心: 295毫秒,32.7%
  • 8核心: 219毫秒,24.3%

生成10,000,000字节的时间:250毫秒

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485