【问题标题】:C# Cryptography generating a key生成密钥的 C# 密码学
【发布时间】:2011-12-21 09:57:18
【问题描述】:

我正在尝试使用 c# 加密/解密字符串。我找到了无数关于如何做到这一点的教程:this 但是他们中的大多数都认为你已经有了密钥。所以我的问题是:

如何生成密钥?

提前致谢。

【问题讨论】:

  • 您可以要求用户通过阶段

标签: c# .net encryption cryptography


【解决方案1】:

如果您在 System.Security.Cryptography 命名空间中使用加密类,请使用 Rfc2898DeriveBytes 类(@CodeInChaos 指出它取代了 PasswordDeriveBytes)从密码中派生密钥。

如果一个随机键没问题,SymmetricAlgorithm 类有一个GenerateKey 方法。

【讨论】:

  • 我喜欢Rfc2898DeriveBytes msdn.microsoft.com/en-us/library/…
  • @CodeInChaos,什么是 TL;DR 版本,为什么你会选择一个而不是另一个?
  • Rfc2898DeriveBytes 是 PBKDF2,PasswordDeriveBytes 是 PBKDF1。我只是假设 2 比 1 好。
  • 还不错;在看到更多对新标准的引用后,我对其进行了更多研究,并决定更新答案。
  • 有很好的理由避免使用 PBKDF1 以及微软如何在 PasswordDeriveBytes 中实现(扩展)它,请参阅:stackoverflow.com/a/8459312/220643
【解决方案2】:

这取决于你处理钥匙。

如果您自动生成密钥并且只是使用密钥交换方法在某个通道上交换密钥,那么您应该使用诸如RNGCryptoServiceProvider 之类的强随机数生成器来生成密钥。实际上 .NET 中的大多数密码器都会自动生成一个随机密钥。

如果你想让某种用户输入密码,那么我建议你使用Rfc2898DeriveBytes 类。 .NET Security blog上也有关于Rfc2898DeriveBytes的教程。

【讨论】:

    【解决方案3】:

    根据你想要的密钥,你可以在这里生成一个

    http://randomkeygen.com/https://www.grc.com/passwords.htm

    但是你想要什么类型的钥匙呢?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-18
      • 1970-01-01
      • 2018-05-31
      • 2010-12-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多