听起来像你需要读入Rfc2898DeriveBytes类。
Rfc2898DeriveBytes.GetBytes();
它有一个方法(上文),可以允许,简单地通过将一个int值来调整该被送入上的对称加密算法的。重点和.IV属性字节数组的大小。 MS官方的70-536版书籍建议通过将KeySize属性/ 8分开来进行此操作。例如,TripleDes或AESManaged。无论你使用什么,算法本身都会有一些需要先满足的预先需求。即满足关键尺寸条件。 RunTime会自动填充属性和字段等,为您提供最好,最强大的值。但是IV和Key需要来自你。这如何可以做到以下几点:
RijndaelManaged myAlg = new RiRijndaelManaged();
byte[] salt = Encoding.ASCII.GetBytes("Some salt value");
Rfc2898DeriveBytes key = new Rfc2898DeriveBytes("some password", salt);
myAlg.Key = key.GetBytes(myAlg.KeySize/8);
myAlg.IV = key.GetBytes(myAlg.BlockSize/8);
// myAld should now fully set-up.
上面可以看到我的意思做亲语法,因为它应该非常 做这一切为你,没有你竟然真的有蝙蝠的眼睛 - 满足它的预先要求。
Microsoft 70-536书指出,.Key属性期望您按字节提供 的字节数组,而不是位。 RFC类以字节形式工作,其中算法KeySize属性以位为单位工作。 1个字节= 8位。你能看到这是怎么回事吗? 这应该给你一个想法,为什么上面的示例peice代码完成了它的方式!我研究过它,这对我来说非常合适!
上述答案应该允许您使用提供的密码和静态盐值创建算法对象,该值可以是两端的硬代码。您只需要担心如何确保存储在.Key和.IV中的字节数组安全地传输到收件人,以便可以成功解密您加密的邮件。通过安全地重建相同的算法对象。
OBTW:
AESManaged具有密钥大小REQ':128位= 16个字节!!! (8 * 8 = 64,64Bit/8bits per Byte = 8 Bytes)因此,
64 * 2 = 128Bit,8 * 2,> 16字节密钥大小!
256Bit = 32Bytes !!!!
根据70-536官方培训包的书,Aes限于128位的密钥大小。例如256位,192和128密钥大小可以与Rijndael类一起使用。
你可以从另一方面完全忘记了所有的垃圾,并简单地使用.GenerateKey和GenerateIV方法,而不是救你整理出一个预共享,并同意密码和静态盐值的所有麻烦。您唯一需要考虑的是找出存储和检索密钥和IV字节数组的方法。二进制格式化程序? 。
如果你想使用AES256,那么你的密钥应该是32个字节,并设置KeySize属性= 256。否则它将使用AES 128.你可以使用全零,但在安全上下文中,它不安全。是的,最好生成随机密钥(如在迈克尔霍华德 - 微软的答案),并安全地存储。 – 2015-02-12 06:36:46