568
Chương 14: Mật mã
new PasswordDeriveBytes(args[1], salt);
// Thiết lập giải thuật băm dùng để tạo khóa, tên
// giải thuật được chỉ định trong đối số dòng lệnh thứ nhất.
// Giải thuật được sử dụng mặc định là SHA-1.
pdb.HashName = args[0];
// Thiết lập số lần lặp là 200 (đây là số lần giải thuật băm
// được áp dụng cho password để tạo khóa). Mặc định là 100.
pdb.IterationCount = 200;
// Tạo một khóa gồm 8 byte (64 bit) từ password.
// Chiều dài của khóa bị giới hạn bởi chiều dài của
// mã băm - 160 bit đối với SHA-1.
byte[] key = pdb.GetBytes(8);
// Hiển thị khóa và salt.
Console.WriteLine("Key = {0}", BitConverter.ToString(key));
Console.WriteLine("Salt = {0}", BitConverter.ToString(salt));
}
}
Chạy lệnh
DerivedKeyExample SHA1 S0meVereeStr@ngeP@$$w0rd
(sử dụng giải thuật băm
SHA-1 để truy lại một khóa gồm 8 byte từ chuỗi "
S0meVereeStr@ngeP@$$w0rd
") sẽ sinh ra kết
xuất tương tự như sau:
Key = 53-72-74-5B-A4-88-A4-80
Salt = 70-82-79-F4-3B-F9-DF-D2
Chú ý rằng, mỗi khi bạn chạy cùng một lệnh,
DerivedKeyExample
sinh ra khóa khác nhau. Đó
là do tác dụng của salt. Nếu bạn bỏ đi dòng lệnh gán một giá trị ngẫu nhiên vào salt (được in
đậm trong đoạn mã trên), sau đó biên dịch lại và chạy
DerivedKeyExample
, bạn sẽ nhận thấy ví
dụ này luôn tạo ra cùng một khóa với một password cho trước.
8.
8.
G i m t bí m t b ng phép m t hóa b t đ i x ng
ử ộ
ậ ằ
ậ
ấ ố ứ
G i m t bí m t b ng phép m t hóa b t đ i x ng
ử ộ
ậ ằ
ậ
ấ ố ứ
Bạn cần sử dụng phép mật hóa bất đối xứng (asymmetric encryption) để gửi một
bí mật.
Thể hiện hóa lớp giải thuật bất đối xứng
System.Security.Cryptography.
RSACryptoServiceProvider
. Sử dụng phương thức
RSACryptoServiceProvider.