576
Chương 14: Mật mã
Lớp
RSACryptoServiceProvider
và
DSACryptoServiceProvider
không cung cấp phương thức
nào trực tiếp gỡ bỏ kho chứa khóa. Để xóa các khóa đã được lưu trữ, bạn hãy thiết lập giá trị
của
PersistKeyInCsp
là
false
và gọi phương thức
Clear
hay
Dispose
của đối tượng
RSACryptoServiceProvider
hay
DSACryptoServiceProvider
. Phương thức
DeleteKeys
dưới
đây sẽ trình bày kỹ thuật này:
// Phương thức này tạo một đối tượng RSACryptoServiceProvider
// và xóa các khóa hiện có khỏi kho chứa khóa.
public static void DeleteKeys(string container) {
// Tạo một đối tượng CspParameters và thiết lập trường
// KeyContainerName là tên của kho chứa khóa cần xóa.
System.Security.Cryptography.CspParameters cspParams =
new System.Security.Cryptography.CspParameters();
cspParams.KeyContainerName = container;
// Tạo một đối tượng giải thuật RSA và truyền đối tượng
// CspParameters làm đối số trong phương thức khởi dựng.
using (System.Security.Cryptography.RSACryptoServiceProvider
rsaAlg = new
System.Security.Cryptography.RSACryptoServiceProvider(cspParams)){
// Cấu hình cho đối tượng RSACryptoServiceProvider
// không lưu trữ khóa vào kho chứa khóa.
rsaAlg.PersistKeyInCsp = false;
// Hiển thị PUBLIC KEY. Vì chúng ta gọi Dispose()
// sau lời gọi này nên các khóa hiện có sẽ không thay đổi
// cho đến khi phương thức được gọi lần thứ hai.
System.Console.WriteLine(rsaAlg.ToXmlString(false));
// Vì mã lệnh nằm trong khối "using" nên Dispose được gọi
// trên đối tượng RSACryptoServiceProvider. Vì đối tượng
// này được cấu hình là không lưu trữ khóa nên kho chứa khóa
// sẽ bị xóa. Thay vì gọi Dispose(), gọi rsaAlg.Clear()
// sẽ có cùng tác dụng, vì nó gián tiếp gọi Dispose().
}