563
Chương 14: Mật mã
public class SymmetricEncryptionExample {
public static void Main(string[] args) {
// Tạo một giải thuật Triple DES mới để thu lấy khóa dùng cho
// ví dụ này. Khóa này sẽ được dùng chung trong các phương thức
// EncryptFile và DecryptFile. Bình thường, khóa được
// thỏa thuận giữa người gửi và người nhận, hoặc được gửi
// (bởi người gửi) cùng với file đã-được-mật-hóa.
byte[] key;
byte[] iv;
using(SymmetricAlgorithm alg =
SymmetricAlgorithm.Create("3DES")){
key = alg.Key;
iv = alg.IV;
}
// Mật hóa file. Tiền tố "encrypted" sẽ được thêm vào tên file
// nguồn và được sử dụng làm tên của file đã-được-mật-hóa.
EncryptFile(args[0], "encrypted"+args[0], (byte[])key.Clone(),
(byte[])iv.Clone());
// Giải mật hóa file đã-được-mật-hóa. Tiền tố "decrypted" sẽ được
// thêm vào tên file gốc và được sử dụng làm tên của file
// đã-được-giải-mật-hóa.
DecryptFile("encrypted"+args[0], "decrypted"+args[0], key, iv);
}
// Phương thức dùng để mật hóa một file (bằng giải thuật Triple DES)
// với key và iv cho trước.
private static void EncryptFile(string srcFileName,
string destFileName, byte[] key, byte[] iv) {
// Tạo các stream để truy xuất file nguồn và file đích.
Stream srcFile =
new FileStream(srcFileName, FileMode.Open, FileAccess.Read);