【问题标题】:C# How do I do encryption?C#如何进行加密?
【发布时间】:2011-07-14 12:21:51
【问题描述】:

我不是要一个有代码的教程,我是在做研究,但我想确保我问的是正确的问题。

  • .NET 开箱即用的最佳加密形式是什么?
  • 公钥/私钥,我应该在哪里安全地存储这些东西?
  • 我应该拥有哪些工具才能正确执行此操作?

我从 AESCryptoServiceProvider 开始,加密了我传入的字符串,我很高兴。测试如果我调用它两次,它会得到相同的值。然后意识到我没有提供任何形式的密钥,所以应用程序的第二次运行产生了不同的结果。所以我开始阅读,看到 RSA 公钥/私钥等等等。只是想确保我正在阅读我正在做的正确的道路。那里有很多例子,很少有人提到你把这些钥匙放在哪里,或者你从哪里得到它们。

【问题讨论】:

  • 我还不想将此标记为已回答,我还有一些问题。我应该拥有/使用哪些工具来生成密钥?
  • 我已经用密钥生成更新了我的答案,很抱歉,我没有阅读你的评论。

标签: c# encryption cryptography public-key-encryption encryption-asymmetric


【解决方案1】:

System.Security.Cryptography 中有很多密码学功能。

它们有哈希、密码、流等等。

RSA 提供商是一个不错的提供商。关于安全地存储常量。我只能建议将它们加密存储在解决方案中。 您不应该能够从源代码中读取它们,因此在程序集构建后需要某种安全性。也许是混淆,也许是别的。 关于密钥的生成,不要使用自己的系统,或者我猜的任何开发系统。

编辑:
要生成密钥,您最好使用任一用户输入,例如,只需创建一个小应用程序,该应用程序计算每个字母键入特定文本所需的时间。

或者使用 HRNG/TRNG,硬件随机数生成器(使用来自现实世界的输入,通过传感器检索)。或者True Random Number Generator,基本也是HRNG,不过大多是其他形式的输入,很高级。
RANDOM.ORG应该可以帮到你。

如果它不是那么重要,只需用你的头敲击键盘,看看结果:)。

【讨论】:

  • 是否可以将它们未加密地存储在应用程序外部的文件中,但存储在该系统的用户不应到达的路径中?我注意到最近有人在使用 MSEnterprise 库,他们有一个生成密钥的工具,似乎他们将它们存储在其中。
  • 好吧,谈到安全性,系统是否可破解或可作弊都不是问题,因为确实如此。唯一真正重要的是你拥有什么样的观众,以及你想要投入多少精力来确保安全。对于我的一个小工具,我只是存储了一些数据的 MD5 校验和,如果校验和错误,它将无法运行。所以每个人都可以轻松破解它,但既然没有兴趣这样做,那就足够了。如果安全性非常重要,您可能希望将密钥存储在那里,并对其使用例如加密,并通过它添加或分散散列。
  • random.org 有什么用?您不能将其用于加密,因为您从不受信任的来源获取随机数。
  • @CodeInChaos 首先,我怀疑 RANDOM.ORG 是一个不受信任的来源,其次,它创建几乎真实的随机数(随机不存在),第三,即使它们保留跟踪它,没有正常人可以访问它,他们不会知道你用它做什么。第四,如果您对此持怀疑态度,您可以随时添加来自另一个站点的另一个随机数,或者从您刚用头猛击的种子中添加一个伪随机数。老实说,它比任何 PRNG 都更安全。
  • 感谢您的补充,帮助很大。
【解决方案2】:

选择 AES。 Stack Overflow 已经有 a wonderful implementation of AES Algorithm 作为答案。

【讨论】:

    【解决方案3】:

    关于“公钥/私钥,我在哪里可以安全地存储这些东西?”,我建议您不要重新发明轮子。微软已经花费了大量精力来构建并积极维护和(希望)改进存储私钥的基础设施:https://msdn.microsoft.com/en-us/library/windows/desktop/bb204778%28v=vs.85%29.aspx。您可以使用本机密钥存储。

    【讨论】:

      猜你喜欢
      • 2018-01-04
      • 2017-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-04
      • 1970-01-01
      • 2011-10-22
      相关资源
      最近更新 更多