在C#中反转md5哈希算法

可能重复:
反转MD5哈希

在c#中给出这个方法

public string CalculateFileHash(string filePaths) { var csp = new MD5CryptoServiceProvider(); var pathBytes = csp.ComputeHash(Encoding.UTF8.GetBytes(filePaths)); return BitConverter.ToUInt64(pathBytes, 0).ToString(); } 

如何用“DecodeFileHash”方法扭转这个过程?

 var fileQuery = "fileone.css,filetwo.css,file3.css"; var hashedQuery = CalculateFileHash(fileQuery); // eg "23948759234" var decodedQuery = DecodeFileHash(hashedQuery); // "fileone.css,filetwo.css,file3.css" 

最后,decodeQuery == fileQuery。

这有可能吗? 如果不可能,是否会以任何方式生成我可以轻松解码的哈希?

编辑:所以为了清楚,我只想压缩变量“fileQuery”并解压缩fileQuery以确定它最初是什么。 自散列/解码以来解决该问题的任何建议都已解决?

再次编辑:只需执行base64编码/解码就像是最佳解决方案。

 public string EncodeTo64(string toEncode) { var toEncodeAsBytes = Encoding.ASCII.GetBytes(toEncode); var returnValue = System.Convert.ToBase64String(toEncodeAsBytes); return returnValue; } public string DecodeFrom64(string encodedData) { var encodedDataAsBytes = System.Convert.FromBase64String(encodedData); var returnValue = Encoding.ASCII.GetString(encodedDataAsBytes); return returnValue; } 

不可能。 根据定义和设计,哈希不能恢复为纯文本或其原始输入。


听起来你实际上是在尝试压缩文件。 如果是这种情况,这是使用GZip执行此操作的简单方法:

 public static byte[] Compress( byte[] data ) { var output = new MemoryStream(); using ( var gzip = new GZipStream( output, CompressionMode.Compress, true ) ) { gzip.Write( data, 0, data.Length ); gzip.Close(); } return output.ToArray(); } 

哈希是从原始信息派生的,但它不包含原始信息。 如果您想要一个隐藏原始信息的较短值,但可以解析为原始值,则您的选项相当有限:

  • 压缩原始信息。 如果您需要一个字符串,那么您的原始信息必须相当大,以便压缩的base-64编码版本不会比原始数据更大。
  • 加密原始信息 – 这比仅仅压缩它更安全,并且可以与压缩相结合,但它也可能比原始信息更大。
  • 将原始信息存储在某处并返回查找键。

如果您希望能够获取数据,则需要压缩 ,而不是散列。

你想要做的是加密和解密….

正如@Thomas指出的那样,不是Hash和Unhash是不可能的。 散列通常使用彩虹表或其他一些数据集来打败,这些数据集包含产生相同散列的内容…不保证是输入值,只是在散列算法中产生相同输出的某个值。

Jeff Atwood在这里有一些理解加密的好代码:
http://www.codeproject.com/KB/security/SimpleEncryption.aspx

如果这对你有用

根据定义,加密散列与典型的计算能力量不可逆。 通常甚至不可能找到任何与原始输入具有相同散列的输入。

如果有超过2 ^ n个不同的输入,则在数学上不可能取回原始输入。 n是散列的比特长度(md5为128)。 查看pidgeonhole原理。

哈希是没有无损压缩function的。

加密散列(如MD5)被设计为单向函数,也就是说,导出计算给定散列的源数据在计算上是不可行的。 但是,由于已发现的弱点,MD5在一段时间内并未被认为是安全的:

关于MD5安全 MD5的 维基百科被 认为是有害的

MD5的另一个缺点是,由于其相对较小的尺寸,已发布大型彩虹表 ,可让您查找给定的MD5哈希值,以获得将与指定哈希值冲突的源输入。