562
Chương 14: Mật mã
Giao diện
ICryptoTransform
không quá khó sử dụng, nhưng không mấy thân thiện; do vậy
.NET Framework kèm thêm lớp
System.Security.Cryptography.CryptoStream
. Đây là lớp
dẫn xuất từ
System.IO.Stream
, dùng để đơn giản hóa việc mật hóa và giải mật hóa dữ liệu
được đọc từ các đối tượng
Stream
khác. Lớp này cho phép bạn mật hóa và giải mật hóa dữ
liệu từ các file và các kết nối mạng một cách dễ dàng bằng một mô hình xử lý quen thuộc, và
nó cung cấp cho bạn tất cả các tiện ích quen thuộc khi truy xuất dữ liệu dựa-vào-
Stream
.
Phương thức khởi dựng của
CryptoStream
yêu cầu ba đối số: một
Stream
nằm dưới, một thể
hiện của
ICryptoTransform
, và một giá trị thuộc kiểu liệt kê
System.Security.Cryptography.CryptoStreamMode
. Giá trị
CryptoStreamMode
cho biết chế độ
của đối tượng
CryptoStream
mới; các giá trị hợp lệ là
Read
và
Write
. Khi bạn gọi phương thức
Read
hay
Write
của
CryptoStream
,
CryptoStream
sẽ sử dụng thể hiện
ICryptoTransform
để
mật hóa và giải mật hóa dữ liệu đang truyền qua
CryptoStream
. Đối tượng
CryptoStream
bảo
đảm kích thước khối dùng cho thể hiện
ICryptoTransform
luôn đúng.
Cấu hình của một đối tượng
CryptoStream
có tính linh hoạt cao, nhưng có thể hơi khó hiểu.
Bảng 14.4 mô tả hoạt động của một đối tượng
CryptoStream
dựa trên chế độ của
CryptoStream
và kiểu thể hiện
ICryptoTransform
được sử dụng trong phương thức khởi dựng
của
CryptoStream
.
Bảng 14.4 Hoạt động của đối tượng CryptoStream
Chế độ của
CryptoStream
Chỉ thị của
ICryptoTransform
Mô tả
Read
Mật hóa
Stream
nằm dưới chứa plaintext nguồn.
CryptoStream.Read
ghi ciphertext ra bộ đệm xuất.
Read
Giải mật hóa
Stream
nằm dưới chứa ciphertext nguồn.
CryptoStream.Read
ghi plaintext ra bộ đệm xuất.
Write
Mật hóa
CryptoStream.Write
chỉ định plaintext cần mật hóa.
Stream
nằm dưới nhận ciphertext đã-được-mật-hóa.
Write
Giải mật hóa
CryptoStream.Write
chỉ định ciphertext cần giải mật
hóa.
Stream
nằm dưới nhận plaintext đã-được-giải-
mật-hóa.
Lớp
SymmetricEncryptionExample
dưới đây trình bày cách sử dụng giải thuật Triple DES để
mật hóa một file và rồi giải mật hóa file đó. Phương thức
Main
nhận tên của file cần mật hóa
làm đối số dòng lệnh. Trước tiên, nó sẽ tạo khóa và vectơ khởi động; sau đó, gọi phương thức
EncryptFile
, kế tiếp là phương thức
DecryptFile
, và sinh ra hai file: file thứ nhất chứa phiên
bản đã-được-mật-hóa của file nguồn, file thứ hai chứa phiên bản đã-được-giải-mật-hóa của
file đã-được-mật-hóa (giống file nguồn).
using System;
using System.IO;
using System.Security.Cryptography;