Ну, для начала ключи - это не строки, ключи - это двоичные двоичные объекты. PlainText - это то же самое, на самом деле это не текст, а снова двоичный двоичный объект.
Теперь, конечно, вы можете конвертировать строки в байтовые массивы, используя Encoding.UTF8.GetBytes(message)
, однако при преобразовании ключей назад и вперед это немного сложнее, обычно вы используете Convert.ToBase64String
и Convert.FromBase64String
.
Не забывайте, что блочным шифрам также нужна еще одна вещь, вектор инициализации, так что на самом деле ваши сигнатуры методов должны быть
byte[] Encrypt(byte[] plainText, byte[] key, byte[] iv)
byte[] Decrypt(byte[] cipherText, byte[] key, byte[] iv)
Ключ и IVs должны быть криптографически безопасными случайными числами , не просто набирать их и не использовать функцию Random в C #. Размер ключа и IV зависит от используемого алгоритма шифрования и может быть доступен через свойства классов.
Чтобы создать CSRPNG, вы должны сделать что-то вроде
RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();
byte[] key = new byte[algorithm.KeySizeValue / 8];
rng.GetBytes(key);
byte[] iv = new byte[algorithm.BlockSizeValue / 8];
rng.GetBytes(iv);
Вы также можете использовать класс Rfc2898DeriveBytes для получения ключа и IV из пароля и соли, но опять же соль должна быть криптографически безопасным случайным числом. Вам также следует помнить, что при создании симметричного алгоритма для вас генерируется безопасный ключ и создается IV.
Таким образом, вы можете выбрать правильную кодировку для вашего текста, будь то UTF8, ASCII или что-то еще. В ссылках достаточно примеров, поэтому вырезать и вставлять их здесь бессмысленно.