CÁC GIẢI PHÁP LẬP TRÌNH C# - Trang 561

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

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

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

IV

này. Để thay đổi giá trị của

Key

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

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.

Liên Kết Chia Sẽ

** Đây là liên kết chia sẻ bới cộng đồng người dùng, chúng tôi không chịu trách nhiệm gì về nội dung của các thông tin này. Nếu có liên kết nào không phù hợp xin hãy báo cho admin.