Tốt cho các phím khởi động không phải là chuỗi, các phím là các đốm màu nhị phân. PlainText là như nhau, nó không thực sự là văn bản, một lần nữa nó là một đốm màu nhị phân. Bây giờ tất nhiên bạn có thể chuyển đổi chuỗi thành mảng byte bằng cách sử dụng Encoding.UTF8.GetBytes(message)
, tuy nhiên khi chuyển đổi các phím qua lại phức tạp hơn một chút, bạn thường sử dụng Convert.ToBase64String
và Convert.FromBase64String
.
Đừng quên rằng mật mã khối cũng cần một điều nữa, những khởi Vector, vì vậy thực sự chữ ký phương pháp của bạn nên được
byte[] Encrypt(byte[] plainText, byte[] key, byte[] iv)
byte[] Decrypt(byte[] cipherText, byte[] key, byte[] iv)
Chìa khóa và IV phải mã hóa an toàn số ngẫu nhiên, don' t chỉ cần gõ chúng và không sử dụng chức năng ngẫu nhiên của C#. Kích thước của khóa và IV phụ thuộc vào thuật toán mã hóa được sử dụng và có thể được truy cập bởi các thuộc tính trên các lớp.
Để tạo một CSRPNG bạn làm điều gì đó như
RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();
byte[] key = new byte[algorithm.KeySizeValue/8];
rng.GetBytes(key);
byte[] iv = new byte[algorithm.BlockSizeValue/8];
rng.GetBytes(iv);
Bạn cũng có thể sử dụng lớp Rfc2898DeriveBytes để lấy được chìa khóa và IV từ một mật khẩu và một muối, nhưng một lần nữa muối phải là một số ngẫu nhiên an toàn . Bạn cũng nên lưu ý khi tạo thuật toán đối xứng, khóa bảo mật và IV được tạo cho bạn.
Bằng cách này, bạn có thể chọn mã hóa chính xác cho văn bản của mình, có thể là UTF8, ASCII hoặc bất kỳ thứ gì. Các liên kết có đủ mẫu để cắt và dán ở đây là vô nghĩa.
Rijndael không đối xứng? –
Tôi tin rằng đó là –
Tôi khuyên bạn nên sử dụng Rijndael, sau đó :) –