轻松字符串压缩和加密
类模块,用于轻松地解/压缩和加/解密大字符串

引言
本文讨论了使用纯 VB.NET 代码进行字符串压缩,并带有可选的良好加密,不需要外部工具。
它可以轻松地集成到现有项目中。由于代码保持简单,它适合初学者,并且可以轻松转换为 C#。
背景
为了快速安全地压缩和解压缩大 string
,我搜索了网络以寻找解决方案。 并没有找到一套完整的功能,所以我决定编写这个类模块,它封装了完成此任务所需的所有功能。
Using the Code
虽然可以将任何长度的 string
应用于该过程,但压缩短 string
(例如 'Hello World!
')会适得其反,因为它会导致压缩后的对应物更大。 类的 CompressionRatio
属性告诉您压缩的效果如何。 然后您可以决定是否要使用压缩的 string
,如果是,则可以在其前面和后面自动添加前缀和后缀,以便以后区分压缩内容和未压缩内容。
过程概述
纯文本 -> 到字节数组 -> gzip 压缩 -> 加密 -> 到 base64 字符串 = 缩减文本
缩减文本 -> 到字节数组 -> 解密 -> gzip 解压缩 -> 到字符串 = 纯文本
代码使用起来很简单。 这是压缩 string
的快速方法
Dim CompStr As New clsCompressedString(System.Text.Encoding.UTF8)
CompStr.UnCompressed = "some large text content..."
MsgBox "The compressed string is: " & CompStr.Compressed
... 以及返回的方式
Dim CompStr As New clsCompressedString(System.Text.Encoding.UTF8)
CompStr.Compressed = "..." '<- the previously compressed string
MsgBox "The uncompressed string is: " & CompStr.UnCompressed
错误处理保持在最低限度。 当提供损坏的数据或提供错误的密码时,该类将返回空的 string
。
可选加密通过使用 .NET 内置的 RijndaelManaged 实现最大密钥长度和简化用法:您只需要提供一个密码即可进行加密和解密。 加密密钥和 iv 是根据密码通过使用 SHA256 和 MD5 哈希值生成来生成的。
演示项目展示了所有可用功能。
关注点
涉及 string
转换时,必须正确处理文本编码。 否则,根据您尝试压缩/解压缩的内容,某些或所有字符可能会在压缩/解压缩过程中被搞乱。
为什么不使用 ICSharpCode.SharpZipLib?
嗯,您可以轻松地更改类中的压缩例程以使用 ZipLib。我对此进行了试验,结果表明,ZipLib (0.85.4.369) 仅比内置的 GZip 效率高 7%。 为了获得这种稍好的性能,您必须将 ZipLib 设置为最高压缩级别 (9)。 但这是有代价的:与 GZip 相比,ZipLib 在最高级别非常慢,因此压缩一个巨大的 string
需要花费更长的时间。 因此,我更喜欢 GZip 来完成此任务,因为它快速、可靠,不需要链接到额外的 DLL,并且在使用全面的第三方代码时不会遇到许可和安全问题。
当涉及到二进制文件压缩时,偏好可能会发生变化。 也许那时 ZipLib 会超越 GZip - 但在这种情况下,二进制文件压缩不是分配的任务。
历史
- 2008 年 7 月 1 日:这是第一个版本。 参与并帮助优化和扩展代码。