在 C# 中反转 md5 哈希算法 [重复]

2024-03-08

可能的重复:
反转 MD5 哈希值 https://stackoverflow.com/questions/1471654/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"

其中decodedQuery == 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();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 C# 中反转 md5 哈希算法 [重复] 的相关文章

随机推荐