65.9K
CodeProject 正在变化。 阅读更多。
Home

轻松字符串压缩和加密

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.23/5 (20投票s)

2008年7月1日

CPOL

3分钟阅读

viewsIcon

106893

downloadIcon

4551

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

引言

本文讨论了使用纯 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 日:这是第一个版本。 参与并帮助优化和扩展代码。
© . All rights reserved.