簡體   English   中英

如何將哈希與搜索結果一起存儲?

[英]How do I store a hash with the search results?

我將從搜索查詢中提取500個結果到Web服務; 我將這些存儲在該用戶的會話中,因此分頁不會引起進一步的調用。

我想做的就是將參數組合成一個長字符串並對其進行哈希處理,這樣我就可以快速進行哈希檢查。

在PHP中,這看起來像...

<?php
$_SESSION["shash"] = md5($_GET['x'] . $_GET['y'] . $_GET['z']);
?>

懶惰地做。

所以在C#中我有...

    #region Session Check
        string sCheckStr = rarREF;
        string searchCheck = GetMd5Sum(sCheckStr);
        if ((Session["schk"].ToString().Length > 0) && (Session["schk"].ToString() == searchCheck))
        { }
        else
        {
            if (searchResults != null) this.mySess.SessionVariables.SearchResults = null;
            Session["schk"] = searchCheck;
        }
    #endregion

而且顯然沒有內置默認的MD5類,因此我在另一個站點上使用過。

  #region MD5 Class
    static public string GetMd5Sum(string str)
    {
        // First we need to convert the string into bytes, which
        // means using a text encoder.
        Encoder enc = System.Text.Encoding.Unicode.GetEncoder();

        // Create a buffer large enough to hold the string
        byte[] unicodeText = new byte[str.Length * 2];
        enc.GetBytes(str.ToCharArray(), 0, str.Length, unicodeText, 0, true);

        // Now that we have a byte array we can ask the CSP to hash it
        MD5 md5 = new MD5CryptoServiceProvider();
        byte[] result = md5.ComputeHash(unicodeText);

        // Build the final string by converting each byte
        // into hex and appending it to a StringBuilder
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < result.Length; i++)
        {
            sb.Append(result[i].ToString("X2"));
        }

        // And return it
        return sb.ToString();
    }
    #endregion

哪個不能正常工作。 rarRef是原始內容(公共ActionResult Index(string rarREF))是否有較快速的方法,因為這需要快速。 Base64編碼可以嗎?

這是進行轉換的一種非常低效的方式-而且費時費力。 當然有更簡單的方法可以做到這一點。

這是獲取字符串的MD5哈希並轉換回字符串的更簡單的例程:

public static string Md5HashString(string input)
{
    byte[] bytes = Encoding.UTF8.GetBytes(input);
    byte[] hash;
    using (MD5 md5 = MD5.Create())
    {
        hash = md5.ComputeHash(bytes);
    )
    return Convert.ToBase64String(hash);
}

話雖如此,原來的例程(現在我已經仔細研究過)看起來應該已經可以正常工作了。 我建議還是使用上述方法,因為它更簡單,但是...

如果那仍然不能正常工作,您能確切解釋一下您觀察到的內容嗎? 怎么回事?

為什么不只使用哈希表?

關鍵是您的串聯查詢參數(帶有合適的分隔符),值將是您的結果對象。 允許HashTable類處理哈希和沖突

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM