【问题标题】:Encrypt larger string to smaller string using C# like reverse md5使用 C# 将较大的字符串加密为较小的字符串,如反向 md5
【发布时间】:2013-11-04 07:39:36
【问题描述】:

我们正在尝试将文本“HELLOWORLDTHISISALARGESTRINGCONTENT”转换为更小的文本。在使用 MD5 哈希进行操作时,我们得到了 16 个字节,因为它是一种单向加密,我们无法对其进行解密。有没有其他方法可以将这个大字符串转换为更小的字符串并恢复相同的数据?如果是这样,请告诉我们该怎么做

提前致谢。

【问题讨论】:

  • 您要解决什么问题?你只是想压缩字符串,还是加密它?
  • 我确实想在上述情况下压缩一个字符串,如果我的输入包含 75 个字符,我确实想获得 25 个字符的字符串。这就像压缩一个字符串
  • 样本包含Capital A-Z 0-9 这是正确的吗?如果正确,那么输出字符串是否可以包含大写/小写的混合以及一些特殊字符,例如数字 !@#$%^&*(){}+= ?如果您允许这样做,那么我们可以实际压缩它一点。我们可以压缩多少还有待计算。
  • 您是否正在尝试创建具有嵌入式许可信息的 CD-KEY / Product-Key 之类的东西?
  • 我不是要创建 CD-KEY / Product-Key,而是要在字符串中嵌入数据

标签: c# string encryption md5


【解决方案1】:

大多数压缩算法无法对这么短的序列做很多事情(或者实际上可能会使它变大) - 所以不:没有什么可以神奇地缩小它。您最好的选择可能只是生成一个 guid,并存储针对该 guid 的 full 值(在数据库或其他任何地方),然后将短值用作一次性使用密钥,以查找长值(然后删除记录)。

【讨论】:

    【解决方案2】:

    这在很大程度上取决于输入数据。一般来说——最坏的情况——如果输入数据不够长并且熵很高,你不能通过压缩来减小字符串的大小。

    散列是错误的方法,因为散列函数试图将大的输入数据映射到一个短的数据,但它不能保证(本身)你不能找到第二组数据来映射到相同的字符串.

    您可以尝试执行压缩算法或回溯表。 压缩可以通过 ziplib 或任何其他压缩库来完成(只需 google 即可)。回溯方法需要第二个位置来存储查找信息。例如,当您获得第一个输入字符串时,将其映射到数字 1 并将信息 1 映射到 {input data} 其他地方。对于每个后续数据集,您添加另一个映射条目。如果输入数据集是有限的,这种方法可能会为您节省空间。

    【讨论】:

    • 我尝试压缩一个字符串,字符串长度大于输入
    • @Venkatraman 是存储压缩头信息的开销。您的输入字符串太短,无法使用压缩。
    • 在这种情况下,我该怎么做才能实现它。我确实想将 75 个字符的字符串转换为 25 个字符(反之亦然)
    • @Venkatraman 在这种情况下,请遵循我的第二个建议(查找表)。
    猜你喜欢
    • 2023-04-02
    • 1970-01-01
    • 2014-10-22
    • 1970-01-01
    • 2016-09-15
    • 1970-01-01
    • 2013-08-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多