我正在使用TripleDESCryptoServiceProvider
,需要存储加密密钥。
如果我调用provider GenerateKey
方法,这只是一个base64编码的字符串吗?如果是这样,我可以安全地取消编码,例如使用结果字符串作为键吗?
稍微不同的是,在进行单向哈希时,使用同一个键作为salt键是否有任何问题?我正在为.net编写一个简单的成员资格提供程序,允许用户选择加密技术(普通,散列,加密),因此想知道是否有必要让用户同时指定salt密钥和加密密钥。
答案 0 :(得分:4)
调用GenerateKey会生成新的随机,安全(即非弱)密钥。它的长度(128或192)取决于TripleDESCryptoServiceProvider
的设置方式。
如果我调用提供者GenerateKey方法,这只是一个基本的64位编码字符串吗?
格式本身是一个byte[]
数组,因为您只能从Key
属性中检索它 - 所以它是不是 base64,但如果您可以轻松编码希望,例如Convert.ToBase64String(algo.Key);
如果是这样,我可以安全地取消编码,例如使用结果字符串作为键吗?
您不能将字符串用作键 - 除非您将其转换回byte[]
。但是,您可以将密钥保存为它的使用之间的字符串(如果这对您的应用程序有任何帮助)。
稍微不同的是,在进行单向哈希时,使用同一个键作为salt键是否有任何问题?
如果您将随机数据用作键 或作为 salt ,那么应该没有问题。只是不要为 (和)使用相同的数据。
答案 1 :(得分:1)
稍微不同的是,使用它有什么问题 在进行单向哈希时,与盐键相同的键?
盐是公共参数;私有和对称密钥应该是秘密的。
我正在为.net编写一个简单的成员资格提供程序,它允许 用户选择加密技术(普通,哈希,加密)等 想知道是否有必要让用户同时指定一个盐 密钥和加密密钥。
在回答之前,我们需要查看有关该计划的更多信息。一般来说,我不习惯允许用户选择格式或参数(密码除外)。