C# 如何存储包含搜索结果的哈希?

C# 如何存储包含搜索结果的哈希?,c#,asp.net,asp.net-mvc,.net-3.5,C#,Asp.net,Asp.net Mvc,.net 3.5,我从一个搜索查询中提取500个结果到一个Web服务;我将这些存储在该用户的会话中,这样分页就不会引起进一步的调用 我要做的是将参数粘在一起,形成一个长字符串,并对它们进行散列,这样我就有了一个快速散列来进行检查 在php中,这看起来像 <?php $_SESSION["shash"] = md5($_GET['x'] . $_GET['y'] . $_GET['z']); ?> 显然没有内置默认的MD5类,所以我在另一个站点上使用了一个 #region MD5 Class

我从一个搜索查询中提取500个结果到一个Web服务;我将这些存储在该用户的会话中,这样分页就不会引起进一步的调用

我要做的是将参数粘在一起,形成一个长字符串,并对它们进行散列,这样我就有了一个快速散列来进行检查

在php中,这看起来像

<?php
$_SESSION["shash"] = md5($_GET['x'] . $_GET['y'] . $_GET['z']);
?>
显然没有内置默认的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
#地区MD5类
静态公共字符串GetMd5Sum(字符串str)
{
//首先,我们需要将字符串转换为字节,这
//意味着使用文本编码器。
编码器enc=System.Text.Encoding.Unicode.GetEncoder();
//创建一个足以容纳字符串的缓冲区
字节[]Unicodext=新字节[str.Length*2];
enc.GetBytes(str.ToCharArray(),0,str.Length,unicodext,0,true);
//现在我们有了一个字节数组,我们可以要求CSP对其进行散列
MD5 MD5=新的MD5CryptoServiceProvider();
字节[]结果=md5.ComputeHash(unicodeText);
//通过转换每个字节来构建最终字符串
//转换为十六进制并将其附加到StringBuilder
StringBuilder sb=新的StringBuilder();
for(int i=0;i
它不能正常工作。rarRef位于原始(公共操作结果索引(字符串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类处理哈希和冲突

您的php代码没有显示…它以什么方式“不正常”运行@djna:Darn-jus意外地标记了您的评论,而不是因为移动浏览和胖手指而将其向上投票。很抱歉我倾向于处理创建的MD5实例,因为它实现了IDisposable…但是我们为什么要这么做呢?听起来我们在试图建立一个哈希表——我们有相应的库。@djna——我们知道这个问题是不是在写完之后就被放弃了:)很抱歉“放弃这个问题”,我不得不从工作中开车回去,继续在墙上撞上几个小时。总之,我只是想要最有效的方法来散列查询参数并保存它,djna建议的散列表听起来非常酷和整洁。我认为MD5是一种快速完成工作的方法。。。在PHP中,我无法理解为什么它不能成为C#中的内置函数。无论如何,再次感谢:哦)这实际上是一个非常好的主意。。。我现在就去看看哈希表:o)
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);
}