Звучит так, будто вам нужно читать в класс Rfc2898DeriveBytes.
Rfc2898DeriveBytes.GetBytes();
У него есть метод (см. Выше), который позволяет настраивать размер байтовых массивов, которые передаются в свойства .Key и .IV алгоритма симметричного шифрования, просто передавая значение типа int. Официальная книга MS 70-536 предлагает сделать это программно, разделив свойство KeySize / 8.
Т.е. TripleDes или AESManaged. Независимо от того, что вы используете, сам алгоритм будет иметь некоторые предварительные требования, которые нужно будет встретить в первую очередь. Т.е. удовлетворяющих условиям размера ключа. RunTime автоматически заполнит свойства и поля и т. Д. Лучшими и наиболее сильными значениями для вас. Но IV и Ключ должны исходить от вас. Вот как вы можете сделать следующее:
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 бит. Вы видите, куда это идет ...?
Это должно дать вам представление о том, почему приведенный выше пример кода выполнен таким, какой он есть! Я изучил это, и это чертовски хорошо для меня!
Приведенный выше ответ должен позволить вам создать объект алгоритма с предоставленным паролем и статическим солт-значением, которое может быть жестким кодом на обоих концах. Единственное, что вам нужно сделать, - это позаботиться о том, чтобы убедиться, что байтовые массивы, хранящиеся в .Key и .IV, безопасно передаются получателю, чтобы можно было успешно расшифровать зашифрованное сообщение. С помощью безопасной реконструкции того же алгоритма объекта.
OBTW:
AESManaged имеет размер ключа req ': 128Bits = 16 байт !!!
(8 * 8 = 64, 64 бит / 8 бит на байт = 8 байтов) Поэтому
64 * 2 = 128 бит, 8 * 2, ==> размер ключа 16 байт!
256Bit = 32Bytes !!!!
Согласно официальной книге 70-536, Aes ограничен размером ключа 128 бит. Например, 256-битный, 192-й и 128-й размер ключа можно использовать с классом Rijndael.
С другой стороны, вы можете полностью забыть все это дерьмо и просто использовать вместо этого методы .GenerateKey и GenerateIV, чтобы избавить вас от необходимости разбираться в предварительно согласованном и согласованном пароле и статических значениях соли. Ваша единственная задача - найти способ хранения и извлечения ключа и массивов байтов IV. Двоичный форматтер? .