【问题标题】:How to generate URL safe checksum for string in .NET (url shortener)?如何在 .NET(url 缩短器)中为字符串生成 URL 安全校验和?
【发布时间】:2011-08-09 19:39:14
【问题描述】:

在 .NET 中为字符串生成 URL 安全 校验和的最简单方法是什么?我将使用此校验和作为查找,它将是 URL 的一部分,因此需要是 URL 安全的。

如果GetHashCode 只为different version of .NET 上的相同字符串生成相同的哈希值,那么它对我来说是完美的……基本上我需要的是一个网址缩短器

【问题讨论】:

  • 校验和必须是唯一的吗?一定是猜不透的吗?加密哈希可以满足所有这些要求,但可能会有点长。
  • 不必是唯一的。基本上我只是想要一种方法来获取长字符串的 id,并且该哈希对于不同版本的 .NET 等的相同刺痛是一致的(GetHashCode 不是)。尽可能简短和可猜测就可以了;)

标签: c# .net


【解决方案1】:

创建一个 MD5 校验和(或任何其他)然后使用

HttpServerUtility.UrlTokenEncode

对字符串进行编码。

--- 已编辑以反映 cmets

【讨论】:

  • 我希望不要使用 UrlEncode,因为它在 URL stackoverflow.com/questions/906754/… 中使用时会出现问题
  • 那么你需要的是 HttpServerUtility.UrlTokenEncode。获取校验和并将其直接应用于此方法,该方法将为您提供一个 URL 安全字符串,而无需所有已编码的符号字符。您将使用 HttpServerUtility.UrlTokenDecode 以相同的方式对其进行解码。我会更新答案以避免混淆
  • 成功了! id 又长又丑,但至少它有效;)。谢谢
【解决方案2】:

Base64 不是 url 安全的。它包括字符“+”、“=”和“/”。

SHA1(或 MD5)哈希仅包含字符 0-9a-f,因此在没有 url 编码或 base64 的情况下是 url 安全的。

从字符串返回 40 char 小写 SHA1 哈希的示例方法:

public static string GetSHA1Hash(string input)
{
    byte[] bytes = System.Text.Encoding.Default.GetBytes(input ?? string.Empty);
    bytes = System.Security.Cryptography.SHA1.Create().ComputeHash(bytes);
    System.Text.StringBuilder sb = new System.Text.StringBuilder(40);
    for (int i = 0, l = bytes.Length; i < l; i++)
        sb.Append(bytes[i].ToString("x2"));
    return sb.ToString();
}

【讨论】:

    猜你喜欢
    • 2016-03-13
    • 2012-02-12
    • 1970-01-01
    • 1970-01-01
    • 2015-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-08
    相关资源
    最近更新 更多