如何为TripleDESCryptoServiceProvider生成强加密密钥

时间:2011-10-09 13:34:57

标签: .net encryption cryptography membership-provider tripledes

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

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

稍微不同的是,在进行单向哈希时,使用同一个键作为salt键是否有任何问题?我正在为.net编写一个简单的成员资格提供程序,允许用户选择加密技术(普通,散列,加密),因此想知道是否有必要让用户同时指定salt密钥和加密密钥。

2 个答案:

答案 0 :(得分:4)

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

  

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

格式本身是一个byte[]数组,因为您只能从Key属性中检索它 - 所以它是不是 base64,但如果您可以轻松编码希望,例如Convert.ToBase64String(algo.Key);

  

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

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

  

稍微不同的是,在进行单向哈希时,使用同一个键作为salt键是否有任何问题?

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

答案 1 :(得分:1)

  

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

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

  

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

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