最佳答案
使用 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”应该准备好了!
令人困惑的部分... 因此,与使用‘ rfcKey’对象相比,我可以不仅仅使用 ‘ myPassInBytes’数组来帮助设置我的‘ rj’对象?
我已经在 VS2008中尝试过这样做,直接的答案是否定的。但是,对于为什么使用 RFC 类而不使用我上面提到的其他替代方案,你们是否得到了一个更有根据的答案?