根据日期时间和字符串参数生成唯一的哈希值

Use*_*987 3 c# hash datetime

我想创建一个函数,使我能够始终基于这两个输入参数生成唯一值:

public string ReturnUniqueValue(DateTime date, string ID)
{
 // Logic here
}
Run Code Online (Sandbox Code Playgroud)

日期参数的格式如下:

2017-08-14 11:55:32.00
Run Code Online (Sandbox Code Playgroud)

而ID的格式如下:

112452573848
Run Code Online (Sandbox Code Playgroud)

我想生成一个长度为 40 个字符且从不重复的唯一哈希值。

这可以使用日期时间参数+唯一的ID字符串吗?

我认为日期时间永远不会相同(这几乎是不可能的),因此这应该能够始终生成唯一的值?

Axe*_*eer 6

你可以

  • 将所有参数(无论哪个)写入流中
  • 使用您最喜欢的算法(例如 SHA265)计算哈希值
  • 并返回其前 20 个值(= 40 个字符)作为最终结果

在代码中:

public string ReturnUniqueValue(DateTime date, string ID)
{
    var result = default(byte[]);

    using (var stream = new MemoryStream())
    {
        using (var writer = new BinaryWriter(stream, Encoding.UTF8, true))
        {
            writer.Write(date.Ticks);
            writer.Write(ID);
        }

        stream.Position = 0;

        using (var hash = SHA256.Create())
        {
            result = hash.ComputeHash(stream);
        }
    }

    var text = new string[20];

    for (var i = 0; i < text.Length; i++)
    {
        text[i] = result[i].ToString("x2");
    }

    return string.Concat(text);
}
Run Code Online (Sandbox Code Playgroud)

注意:如果您只想为多个参数提供一个唯一值,则简单的串联应该已经可以做到。由于您明确要求使用 40 个字符的“哈希”,因此这个更复杂的解决方案可能更适合。

注意:将其扩展为更多相同类型的参数(例如两个字符串)应包括流中的参数位置以避免冲突((a, b) != (b, a))。