561
Chương 14: Mật mã
DES
DESCryptoServiceProvider
64
TripleDES hay 3DES
TripleDESCryptoServiceProvider
128, 192
RC2
RC2CryptoServiceProvider
40, 48 56, 64, 72, 80,
88, 96, 104, 112, 120,
128
Rijndael
RijndaelManaged
128, 192, 256
Mặc dù bạn có thể tạo ra các thể hiện của các lớp giải thuật đối xứng một cách trực tiếp, lớp
cơ sở
SymmetricAlgorithm
là một factory cho các lớp hiện thực cụ thể dẫn xuất từ đó. Gọi
phương thức tĩnh
SymmetricAlgorithm.Create
với đối số là tên giải thuật sẽ trả về một đối
tượng thuộc kiểu đã được chỉ định. Sử dụng factory cho phép bạn viết mã lệnh tổng quát, và
mã lệnh này có thể làm việc với bất kỳ hiện thực giải thuật đối xứng nào:
string algName = "3DES";
SymmetricAlgorithm alg = SymmetricAlgorithm.Create(algName);
Nếu bạn gọi
SymmetricAlgorithm.Create
và không chỉ định tên giải thuật,
SymmetricAlgorithm
sẽ trả về một đối tượng
RijndaelManaged
. Nếu bạn chỉ định
một giá trị không hợp lệ,
SymmetricAlgorithm
sẽ trả về
null
. Bạn có thể cấu hình
các ánh xạ tên/lớp mới bằng file cấu hình (xem tài liệu .NET Framework SDK để
biết thêm chi tiết).
Trước khi mật hóa dữ liệu với một trong các lớp giải thuật đối xứng, bạn cần một khóa (key)
và một vectơ khởi động (initialization vector). Khóa là thông tin bí mật dùng để mật hóa và
giải mật hóa dữ liệu. Vectơ khởi động là dữ liệu ngẫu nhiên được truyền cho giải thuật mật
hóa. Bạn phải sử dụng cùng khóa và vectơ khởi động cho cả mật hóa và giải mật hóa dữ liệu.
Tuy nhiên, chỉ có khóa là cần phải được giữ bí mật, bạn có thể lưu trữ hay gửi vectơ khởi
động cùng với dữ liệu đã-được-mật-hóa.
Khóa cho mỗi lớp dẫn xuất từ
SymmetricAlgorithm
có thể được truy xuất thông qua thuộc tính
Key
, và vectơ khởi động có thể được truy xuất thông qua thuộc tính
IV
. Cách đơn giản nhất và
ít lỗi nhất để tạo khóa và vectơ khởi động mới là để lớp tự tạo chúng giùm bạn. Sau khi đã tạo
một đối tượng giải thuật đối xứng, nếu bạn không thiết lập các thuộc tính
Key
và
IV
cho nó,
đối tượng này sẽ tự động tạo ra các giá trị mới ngay khi bạn cho gọi một thành viên có sử
dụng các giá trị
Key
và
IV
. Một khi đã được thiết lập, đối tượng giải thuật đối xứng sẽ tiếp tục
sử dụng các giá trị
Key
và
IV
này. Để thay đổi giá trị của
Key
và
IV
, bạn có thể gán trực tiếp
các giá trị mới hoặc gọi phương thức
GenerateKey
và
GenerateIV
(buộc đối tượng giải thuật
đối xứng tạo ra các giá trị ngẫu nhiên mới).
Bạn không thể trực tiếp thực hiện mật hóa và giải mật hóa với một đối tượng giải thuật đối
xứng. Một khi đã tạo và cấu hình đối tượng giải thuật đối xứng, bạn phải gọi phương thức
CreateEncryptor
hay
CreateDecryptor
của nó để thu lấy một đối tượng có hiện thực giao diện
System.Security.Cryptography.ICryptoTransform
. Kế đó, bạn có thể sử dụng các phương
thức của đối tượng
ICryptoTransform
này để mật hóa và giải mật hóa dữ liệu. Tuy nhiên, đối
tượng
ICryptoTransform
yêu cầu bạn truyền dữ liệu theo từng khối (có kích thước cố định) và
lấp (bằng tay) khối dữ liệu cuối cùng vì khối này ít khi có kích thước đúng.