可能重复:
Reversing an MD5 Hash
在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); // e.g. "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;
}
答案 0 :(得分:14)
不可能。根据定义和设计,哈希不能恢复为纯文本或其原始输入。
听起来你实际上是在尝试压缩文件。如果是这种情况,这是使用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();
}
答案 1 :(得分:6)
哈希是从原始信息派生的,但它不包含原始信息。如果您想要一个隐藏原始信息的较短值,但可以将其解析为原始值,则您的选项相当有限:
答案 2 :(得分:4)
你想要做的是加密和解密......
不是Hash和Unhash,正如@Thomas指出的那样,是不可能的。 哈希通常使用彩虹表或其他一些数据集来打败,这些数据集包含产生相同哈希值的东西...不保证是输入值,只是某些值,它在哈希算法中产生相同的输出
杰夫阿特伍德在这里有一些理解加密的好代码:
http://www.codeproject.com/KB/security/SimpleEncryption.aspx
如果这对你有用
答案 3 :(得分:4)
如果您希望能够获取数据,则需要压缩,而不是散列。
答案 4 :(得分:3)
根据定义,加密散列在典型的计算能力下是不可逆的。通常甚至不可能找到任何与原始输入具有相同哈希值的输入。
如果输入的输入超过2 ^ n,则在数学上不可能取回原始输入。 n是散列的比特长度(md5为128)。查看pidgeonhole原理。
散列不是无损压缩函数。
答案 5 :(得分:3)
加密哈希(如MD5)被设计为单向函数,也就是说,从计算上推导出计算给定哈希的源数据是不可行的。但是,由于已发现的弱点,MD5在一段时间内并未被认为是安全的:
Wikipedia on MD5 Security MD5 Considered Harmful
MD5的另一个缺点是,由于其相对较小的大小,已发布大rainbow tables,允许您查找给定的MD5哈希以获取将与指定哈希值冲突的源输入。