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

553

Chương 14: Mật mã

Lớp trừu tượng

HashAlgorithm

cung cấp lớp cơ sở để tất cả các hiện thực giải thuật băm cụ

thể dẫn xuất từ đó. Thư viện lớp .NET Framework có sáu hiện thực giải thuật băm cụ thể
(được liệt kê trong bảng 14.1), mỗi lớp hiện thực là một thành viên của không gian tên

System.Security.Cryptography

. Các lớp với phần đuôi là

CryptoServiceProvider

bọc lấy các

chức năng do Win32 CryptoAPI cung cấp, trong khi các lớp với phần đuôi là

Managed

được

hiện thực hoàn toàn bằng mã lệnh được-quản-lý.

Bảng 14.1 Các hiện thực giải thuật băm

Tên giải thuật

Tên lớp

Kích thước mã băm (bit)

MD5

MD5CryptoServiceProvider

128

SHA hay SHA1

SHA1CryptoServiceProvider

160

SHA1Managed

SHA1Managed

160

SHA256 hay SHA-256

SHA256Managed

256

SHA384 hay SHA-384

SHA384Managed

384

SHA512 hay SHA-512

SHA512Managed

512

Mặc dù bạn có thể trực tiếp tạo ra thể hiện của các lớp giải thuật băm, lớp cơ sở

HashAlgorithm

là một factory cho các lớp hiện thực dẫn xuất từ nó. Gọi phương thức tĩnh

HashAlgorithm.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 ghi 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 băm nào.
Một khi bạn đã có đối tượng

HashAlgorithm

, phương thức

ComputeHash

của nó nhận một mảng

byte chứa plaintext và trả về một mảng byte mới chứa mã băm được tạo ra. Bảng 14.1 cho biết
kích thước của mã băm (tính bằng bit) được tạo ra bởi mỗi lớp giải thuật băm.
Lớp

HashPasswordExample

dưới đây trình bày cách tạo mã băm từ một chuỗi (password chẳng

hạn). Ứng dụng này cần hai đối số dòng lệnh: tên của giải thuật băm cần sử dụng và chuỗi cần
tạo mã băm. Vì phương thức

HashAlgorithm.ComputeHash

yêu cầu một mảng byte nên trước

hết bạn phải mã hóa chuỗi nhập bằng lớp

System.Text.Encoding

(lớp này cung cấp các cơ chế

dùng để chuyển chuỗi thành/từ các định dạng mã hóa ký tự khác nhau).

using System;

using System.Text;

using System.Security.Cryptography;

public class HashPasswordExample {

public static void Main(string[] args) {

// Tạo HashAlgorithm của kiểu được chỉ định bởi

// đối số dòng lệnh thứ nhất.

using (HashAlgorithm hashAlg = HashAlgorithm.Create(args[0])) {

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.