这个问题已经存在:




已关闭10年。






在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();
}

09-19 06:51