gpt4 book ai didi

.net - 散列Unicode密码

转载 作者:行者123 更新时间:2023-12-04 13:29:24 24 4
gpt4 key购买 nike

我正在为.NET应用程序编写密码盐/哈希过程,主要是按照本文的指南进行:
http://www.aspheute.com/english/20040105.asp

基本上,用于计算盐化哈希的代码是这样的:

public string ComputeSaltedHash(string password, byte[] salt) {

// Get password ASCII text as bytes:
byte[] passwordBytes = System.Text.Encoding.ASCII.GetBytes(password);

// Append the two arrays
byte[] toHash = new byte[passwordBytes.Length + salt.Length];
Array.Copy(passwordBytes, 0, toHash, 0, passwordBytes.Length);
Array.Copy(salt, 0, toHash, passwordBytes.Length, salt.Length);

byte[] computedHash = SHA1.Create().ComputeHash(toHash);

// Return as an ASCII string
return System.Text.Encoding.ASCII.GetString(computedHash);
}

但是,如果愿意,我希望允许用户在其密码中使用Unicode字符。 (这似乎是一个好主意;任何人都可以想到不是的原因吗?)

但是,我对Unicode的工作方式一无所知,并且担心是否只将 System.Text.Encoding.ASCII的两个引用都更改为 System.Text.Encoding.Unicode,哈希算法可能会生成一些字节组合,这些字节组合不会形成有效的Unicode字符和GetString调用会吓坏了。

这是一个有效的问题,还是可以吗?

最佳答案

您不应该使用任何常规编码将任意二进制数据转换回字符串。它不是编码的文本-只是一个字节序列。不要试图将其解释为“普通”文本。原始密码是否包含任何非ASCII字符都与此无关-您当前的代码已损坏。 (仅在此基础上,我就会对链接的文章产生极大的怀疑。)

我会建议:

  • 使用Encoding.UTF8从密码中获取字节。这将允许密码包含任何unicode字符。 Encoding.Unicode在这里也可以。
  • 使用 Convert.ToBase64String 将计算的哈希值转换回文本。 Base64是专门设计用来在ASCII字符集内的文本中表示不透明二进制数据的。
  • 关于.net - 散列Unicode密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4196027/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com