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

569

Chương 14: Mật mã

Encrypt

và khóa công khai (public key) của người nhận để mật hóa thông điệp.

Sau đo, người nhận sẽ sử dụng phương thức

RSACryptoServiceProvider.Decrypt

và khóa riêng (private key) để giải mật hóa bí mật đã-được-mật-hóa.

.NET Framework định nghĩa một hệ thống phân cấp theo lớp cho các giải thuật bất đối xứng
tương tự như đã định nghĩa cho các giải thuật đối xứng (đã được thảo luận trong mục 14.6).
Tất cả các giải thuật bất đối xứng phải thừa kế một lớp cơ sở trừu tượng chung có tên là

System.Security.Cryptography.AsymmetricAlgorithm

. Có hai hiện thực giải thuật bất đối

xứng cụ thể:

System.Security.Cryptography.RSACryptoServiceProvider

System.Security.Cryptography.DSACryptoServiceProvider

Vì có đuôi là

CryptoServiceProvider

nên cả hai lớp này đều bọc lấy các chức năng do Win32

CryptoAPI cung cấp. Tuy nhiên, chỉ có lớp

RSACryptoServiceProvider

là hỗ trợ việc mật hóa

dữ liệu. Lớp

DSACryptoServiceProvider

hiện thực Digital Signature Algorithm (DSA), bạn có

thể sử dụng giải thuật này chỉ để tạo chữ ký số (xem Federal Information Processing
Standard [FIPS] 186-2
tại

[

http://www.itl.nist.gov/fipspubs]

để biết thêm chi tiết về DSA).

Mặc dù bạn có thể tạo một đối tượng giải thuật bất đối xứng bằng phương thức tĩnh

Create

của lớp cơ sở

AsymmetricAlgorithm

, nhưng bù lại bạn sẽ phải trả giá chút ít cho việc này. Lớp

AsymmetricAlgorithm

không khai báo các phương thức mà

RSACryptoServiceProvider

sử

dụng để mật hóa và giải mật hóa dữ liệu. Thay vào đó, bạn phải trực tiếp thể hiện hóa lớp

RSACryptoServiceProvider

bằng một trong các phương thức khởi dựng của nó.

Trước khi mật hóa hay giải mật hóa dữ liệu với đối tượng

RSACryptoServiceProvider

, bạn cần

truy xuất các khóa thích hợp. Khóa của giải thuật bất đối xứng khác nhiều so với khóa của giải
thuật đối xứng. Thứ nhất, nó có hai thành phần: khóa công khai (public key) và khóa riêng
(private key). Thứ hai, thay vì chỉ là một dãy các byte được sinh ngẫu nhiên, khóa bất đối
xứng được tạo theo một cách thức đặc biệt. Có một mối quan hệ toán đặc biệt giữa khóa công
khai và khóa riêng; mối quan hệ này cho phép giải thuật bất đối xứng mật hóa dữ liệu bằng
một khóa và giải mật hóa dữ liệu bằng một khóa khác. Mỗi giải thuật bất đối xứng sử dụng
cách thức tạo khóa của chính nó, và các lớp hiện thực cụ thể đóng gói các chức năng cần thiết
để tạo ra các khóa mới.
Khóa công khai không cần được giữ bí mật và chủ sở hữu có thể tùy ý gửi nó cho bạn thông
qua e-mail, hoặc post nó lên một website hay một server phân phối khóa để mọi người cùng
thấy. Những ai muốn gửi bí mật thì sử dụng khóa công khai để mật hóa bí mật. Sau đó, người
nhận sử dụng khóa riêng để giải mật hóa bí mật. Khóa riêng phải được giữ bí mật; những ai sở
hữu khóa riêng đều có thể giải mật hóa dữ liệu đã-được-mật-hóa bằng khóa công khai.
Để tạo một bí mật được-mật-hóa-bất-đối-xứng, bạn phải có khóa công khai của người nhận và
nạp nó vào một đối tượng

RSACryptoServiceProvider

. Có hai cách nạp khóa công khai:

Sử dụng phương thức

RSACryptoServiceProvider.ImportParameters

để nhập một cấu

trúc

System.Security.Cryptography.RSAParameters

, cấu trúc này chứa thông tin khóa

công khai của người nhận. Chủ sở hữu có thể tạo cấu trúc

RSAParameters

bằng phương

thức

RSACryptoServiceProvider.ExportParameters

và gửi nó cho bạn. Tuy nhiên,

người này có thể gửi cho bạn khóa công khai ở dạng byte, và bạn phải tự nạp giá trị này
vào cấu trúc

RSAParameters

.

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.