3

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

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

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

4

2 回答 2

4

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

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

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

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

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

稍微不同的是,在进行单向哈希时,使用相同的密钥作为盐密钥有什么问题吗?

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

于 2011-10-09T14:33:56.453 回答
1

稍微不同的是,在进行单向哈希时,使用相同的密钥作为盐密钥有什么问题吗?

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

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

We would need to see more information on the scheme before answering. In general, I would not feel comfortable allowing a user to choose formats or parameters (other than a password).

于 2011-10-09T18:52:34.810 回答