使用Rfc2898DeriveBytes和仅使用之间有什么区别Encoding.ASCII.GetBytes(string object);
?
我在这两种方法中都取得了相对的成功,前一种方法是一个比较冗长的方法,而后者则简单易懂。两者似乎都允许您最终做同样的事情,但是我很难理解使用前者而不是后者的意义。
我已经掌握的基本概念是,您可以将字符串密码转换为字节数组,以用于例如对称加密类AesManaged
。通过RFC类,但是在创建rfc对象时可以使用salt值和密码。我认为它更安全,但这充其量也是毫无根据的猜测!另外,它还允许您返回一定大小的字节数组,类似的东西。
以下是一些示例,向您展示我来自哪里:
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'应该准备好了!
令人困惑的部分...因此,我不能只使用我的“ myPassInBytes”数组来帮助设置“ rj”对象,而不是使用“ rfcKey”对象吗?
我曾尝试在VS2008中执行此操作,但直接的答案是“否”。但是你们是否有一个更好的受过良好教育的答案,那就是为什么在我上面提到的其他替代方法上使用RFC类呢?