【发布时间】:2011-02-09 04:39:59
【问题描述】:
使用 Rfc2898DeriveBytes 和只使用 Encoding.ASCII.GetBytes(string object); 有什么区别?
我在这两种方法上都取得了相对的成功,前者是一种更冗长的方法,而后者则简单明了。两者似乎都允许你最终做同样的事情,但我很难看出使用前者而不是后者的意义。
我能掌握的基本概念是可以将字符串密码转换成
用于例如对称加密类AesManaged的字节数组。通过 RFC 类,但您可以在创建 rfc 对象时使用盐值和密码。我认为它更安全,但充其量仍然是一个没有受过教育的猜测!此外,它还允许您返回一定大小的字节数组,以及类似的东西。
这里有几个例子告诉你我来自哪里:
byte[] myPassinBytes = Encoding.ASCII.GetBytes("some password");
或
string password = "P@%5w0r]>";
byte[] saltArray = Encoding.ASCII.GetBytes("this is my salt");
Rfc2898DeriveBytes rfcKey = new Rfc2898DeriveBytes(password, saltArray);
“rfcKey”对象现在可用于设置 .Key 或 .IV 属性 关于对称加密算法类。
即。
RijndaelManaged rj = new RijndaelManaged ();
rj.Key = rfcKey.Getbytes(rj.KeySize / 8);
rj.IV = rfcKey.Getbytes(rj.Blocksize / 8);
'rj' 应该准备好了!
令人困惑的部分......所以我可以不只使用我的“rfcKey”对象吗? 'myPassInBytes' 数组来帮助设置我的 'rj' 对象?
我曾尝试在 VS2008 中执行此操作,但立即回答是否定的。但是对于为什么使用 RFC 类而不是我上面提到的其他替代方案,你们有更好的回答吗?
【问题讨论】:
-
这道题是关于复习和备考的!
标签: c# cryptography rfc2898