581
Chương 14: Mật mã
// Trích khóa phiên từ dữ liệu trao đổi bằng
// phương thức DeformatKeyExchange.
byte[] sessionKey = DeformatKeyExchange(exchangeData,
cspParams);
// Hiển thị khóa phiên vừa được trích.
Console.WriteLine("Session Key at Destination = {0}\n\r",
BitConverter.ToString(sessionKey));
// Nhấn Enter để kết thúc.
Console.ReadLine();
}
}
// Phương thức dùng để mật hóa và định dạng khóa phiên đối xứng.
// Để mật hóa khóa phiên, chúng ta cần truy xuất PUBLIC KEY
// của người nhận (trong cấu trúc RSAParameters).
private static byte[] FormatKeyExchange(byte[] sessionKey,
RSAParameters rsaParams) {
// Tạo một giải thuật bất đối xứng RSA.
using (RSACryptoServiceProvider asymAlg =
new RSACryptoServiceProvider()) {
// Nạp PUBLIC KEY của người nhận.
asymAlg.ImportParameters(rsaParams);
// Tạo một RSA OAEP formatter để định dạng dữ liệu trao đổi.
RSAOAEPKeyExchangeFormatter formatter
= new RSAOAEPKeyExchangeFormatter();
// Chỉ định giải thuật RSA dùng để mật hóa khóa phiên.
formatter.SetKey(asymAlg);
// Mật hóa và định dạng khóa phiên rồi trả về kết quả.
return formatter.CreateKeyExchange(sessionKey);
}