使用类似C#的反向md5将较大字符串加密为较小字符串

使用类似C#的反向md5将较大字符串加密为较小字符串,c#,string,encryption,md5,C#,String,Encryption,Md5,我们正在尝试将文本“HelloWorldThisisLargestringContent”转换为较小的文本。在使用MD5散列进行加密时,我们得到的是16字节,因为它是单向加密,所以我们无法解密它。有没有其他方法可以将这个大字符串转换成更小的字符串并还原回相同的数据?如果是,请让我们知道如何做 提前感谢。这在很大程度上取决于输入数据。一般来说,最坏的情况是,如果输入数据不够长且具有高熵,则无法通过压缩来减小字符串的大小 散列是一种错误的方法,因为散列函数试图将一个大的输入数据映射到一个短的输入数据

我们正在尝试将文本“HelloWorldThisisLargestringContent”转换为较小的文本。在使用MD5散列进行加密时,我们得到的是16字节,因为它是单向加密,所以我们无法解密它。有没有其他方法可以将这个大字符串转换成更小的字符串并还原回相同的数据?如果是,请让我们知道如何做


提前感谢。

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

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

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

大多数压缩算法无法处理这么短的序列(或者实际上可能会使序列变大)——因此,不,要想神奇地缩小序列,你没什么办法。您的最佳选择可能是生成一个guid,并存储根据guid键入的完整值(在数据库或其他任何地方),然后将短值用作一次性使用密钥,以查找长值(然后删除记录)。

您试图解决的问题是什么?你只是想压缩这个字符串,还是加密它?在上面的例子中,我确实想压缩一个字符串,如果我的输入包含75个字符,我希望得到25个字符的字符串。这就像压缩字符串示例包含
大写字母a-Z
0-9
这是否正确?如果正确,那么输出字符串是否可以包含大写/小写字母加上一些特殊字符,如数字上的字符!@#$%^&*(){}+= ? 如果你允许这样做,那么我们实际上可以压缩它一点。我们可以压缩多少仍有待计算。您是否正在尝试创建一个CD-KEY/Product KEY之类的东西,其中包含嵌入的许可信息?我不是在尝试创建CD-KEY/Product KEY,而是尝试在字符串中嵌入数据。我尝试压缩字符串,字符串长度大于input@Venkatraman这是存储压缩头信息的开销。您的输入字符串太短,无法使用压缩。在这种情况下,我应该如何实现它。我确实想将其从75个字符的字符串转换为25个字符(反之亦然)@Venkatraman在这种情况下,请遵循我的第二个建议(查找表)。