572
Chương 14: Mật mã
byte[] plaintext = Encoding.Unicode.GetBytes(args[0]);
// Mật hóa thông điệp bằng phương thức EncryptMessage.
// Phương thức này cần PUBLIC KEY của người nhận.
byte[] ciphertext = EncryptMessage(plaintext,
recipientsPublicKey);
// Hiển thị ciphertext do phương thức EncryptMessage trả về.
// Sử dụng phương thức BitConverter.ToString method cho đơn giản
// mặc dù nó chèn dấu gạch nối (-) vào giữa các giá trị byte
// (không đúng với biểu diễn dữ liệu trong bộ nhớ).
Console.WriteLine("Formatted Ciphertext = {0}",
BitConverter.ToString(ciphertext));
// Giải mật hóa thông điệp (đã-được-mật-hóa) bằng phương thức
// DecryptMessage. Phương thức này cần truy xuất PRIVATE KEY
// của người nhận (chỉ có người nhận mới có thể truy xuất được).
// Chúng ta sẽ truyền cho nó một đối tượng CspParameters
// (cho biết PRIVATE KEY được lưu trữ trong kho chứa khóa nào).
// Giải pháp này an toàn hơn là truyền PRIVATE KEY thô
// giữa các phương thức.
byte[] decData = DecryptMessage(ciphertext, cspParams);
// Chuyển thông điệp đã-được-giải-mật-hóa từ mảng byte
// thành chuỗi và hiển thị nó ra cửa sổ Console.
Console.WriteLine("Decrypted message = {0}",
Encoding.Unicode.GetString(decData));
// Nhấn Enter để kết thúc.
Console.ReadLine();
}
// Phương thức dùng để mật hóa (theo RSA) một thông điệp bằng
// PUBLIC KEY (nằm trong một cấu trúc RSAParameters).
private static byte[] EncryptMessage(byte[] plaintext,
RSAParameters rsaParams) {