580
Chương 14: Mật mã
// và trích thông tin PUBLIC KEY vào biến recipientsPublicKey.
using (RSACryptoServiceProvider rsaAlg =
new RSACryptoServiceProvider(cspParams)) {
// Cấu hình cho giải thuật lưu khóa vào kho chứa khóa.
rsaAlg.PersistKeyInCsp = true;
// Trích PUBLIC KEY.
recipientsPublicKey = rsaAlg.ExportParameters(false);
}
// Tạo giải thuật đối xứng Triple-DES và sử dụng
// khóa được sinh tự động làm khóa phiên.
using (SymmetricAlgorithm symAlg =
SymmetricAlgorithm.Create("3DES")) {
// Hiển thị khóa phiên gốc.
Console.WriteLine("Session Key at Source = {0}\n\r",
BitConverter.ToString(symAlg.Key));
// Chuẩn bị khóa phiên đối xứng dùng cho trao đổi
// (sử dụng phương thức FormatKeyExchange, phương thức
// này cần khóa dùng để mật hóa và PUBLIC KEY
// của người nhận).
byte[] exchangeData =
FormatKeyExchange(symAlg.Key, recipientsPublicKey);
// Hiển thị khóa phiên đã-được-mật-hóa (do phương thức
// FormatKeyExchange trả về).
Console.WriteLine("Exchange Data = {0}\n\r",
BitConverter.ToString(exchangeData));
// ****** GỬI KHÓA ******
// Bây giờ, khóa phiên có thể được gửi đi bằng các
// kênh giao tiếp bình thường.