【问题标题】:How to generate a strong encryption key for TripleDESCryptoServiceProvider如何为 TripleDESCryptoServiceProvider 生成强加密密钥
【发布时间】:2011-10-09 13:34:57
【问题描述】:

我正在使用TripleDESCryptoServiceProvider,需要存储加密密钥。

如果我调用提供者GenerateKey 方法,这只是一个base64 编码的字符串吗?如果是这样,我可以安全地取消编码,例如使用生成的字符串作为键吗?

稍有不同的是,在进行单向哈希时,使用同一个键作为盐键有什么问题吗?我正在为 .net 编写一个简单的会员提供程序,它允许用户选择加密技术(普通、哈希、加密),所以想知道是否有必要让用户同时指定盐密钥和加密密钥。

【问题讨论】:

    标签: .net encryption cryptography membership-provider tripledes


    【解决方案1】:

    调用GenerateKey 将生成一个新的随机安全(即非弱)密钥。它的长度(128 或 192)取决于您的 TripleDESCryptoServiceProvider 的设置方式。

    如果我调用提供者的 GenerateKey 方法,这只是一个 base 64 编码的字符串吗?

    格式本身是一个byte[] 数组,因为您只能从Key 属性中检索它 - 所以它不是 base64,但如果您愿意,可以很容易地以这种方式编码,例如Convert.ToBase64String(algo.Key);

    如果是这样,我可以安全地取消编码,例如使用生成的字符串作为键吗?

    您不能将字符串用作键 - 除非您将其转换回 byte[]。但是,您可以在其使用之间将密钥保留为字符串(如果这对您的应用程序有任何帮助)。

    稍有不同的是,在进行单向哈希时,使用同一个键作为盐键有什么问题吗?

    如果您使用随机数据作为 key 作为 salt,那么应该没有问题。只是不要对both)使用相同的数据。

    【讨论】:

      【解决方案2】:

      稍微不同的是,使用这个有什么问题吗 进行单向哈希时与盐键相同的键吗?

      盐是公共参数;并且私钥和对称密钥应该是秘密的。

      我正在为 .net 编写一个简单的会员提供程序,它允许 用户选择加密技术(普通,哈希,加密)所以 想知道是否有必要让用户同时指定盐 密钥和加密密钥。

      在回答之前,我们需要查看有关该计划的更多信息。一般来说,我不会让用户选择格式或参数(密码除外)。

      【讨论】:

      • 这里的“用户”是开发者。我当然不会让应用程序用户来决定这一点。那么将盐存储在散列密码旁边没有什么问题吗?
      • @Ben:这听起来很像一个 unix 密码文件(一个 {user, salt, hash} 元组)。如果是这样,我不会有存储格式的问题。
      猜你喜欢
      • 2013-03-17
      • 1970-01-01
      • 2019-08-16
      • 1970-01-01
      • 2022-11-01
      • 2013-06-01
      • 1970-01-01
      • 2017-08-11
      • 1970-01-01
      相关资源
      最近更新 更多