【问题标题】:C# use SHA1 to hash string into byte arrayC# 使用 SHA1 将字符串散列成字节数组
【发布时间】:2014-05-01 04:02:37
【问题描述】:

我正在使用 SHA1 加密一些值,例如密码。 这是我的代码:

String passwd = Membership.GeneratePassword(10, 2);
SHA1 sha = new SHA1CryptoServiceProvider();
byte [] password = sha.ComputeHash(passwd);

但是 VS 返回错误,因为 passwd 是一个字符串。 我必须将密码存储在一个字节数组中,有没有办法解决这个问题?

【问题讨论】:

  • SHA1 不是加密算法。你的意思是哈希。
  • 您使用的是无盐 SHA1,就像过去的 LinkedIn。正如你可能听说的那样,这对他们来说效果并不好。而是使用bcrypt,它可以将密码破解速度降低几个数量级,并且内置了加盐功能。

标签: c# encryption sha1


【解决方案1】:

使用编码将字符串转换为字节数组

var bytes= Encoding.UTF8.GetBytes(passwd);
var password = sha.ComputeHash(bytes);

【讨论】:

  • 我会把变量名改成encoded,否则这有点混乱,不是吗?
  • 新名称 bytes 要好得多。我会使用UTF8 来回答你的答案,而不是使用Unicode 接受的答案。你打败了我,所以我 +1 ;)。
【解决方案2】:
String passwd = Membership.GeneratePassword(10, 2);
byte[] bytes = System.Text.Encoding.UTF8.GetBytes(passwd);
SHA1 sha = new SHA1CryptoServiceProvider();
byte [] password = sha.ComputeHash(bytes);

请注意,SHA1 不会加密数据,而是对它们进行哈希处理。加密的数据可以被解密。哈希算法是一种方法。

【讨论】:

  • 虽然@tvanfosson 首先得到了正确的答案,但我 +1 是为了在被接受后增强你的答案。
  • byte[] 密码 = new SHA1Managed().ComputeHash(Encoding.UTF8.GetBytes(input));作为一个班轮。
猜你喜欢
  • 2020-07-14
  • 2013-04-21
  • 1970-01-01
  • 2017-05-01
  • 1970-01-01
  • 2020-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多