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

559

Chương 14: Mật mã

Cũng như các giải thuật băm chuẩn, bạn có thể trực tiếp tạo ra các đối tượng giải thuật băm có
khóa, hoặc bạn có thể sử dụng phương thức tĩnh

KeyedHashAlgorithm.Create

với đối số là tên

giải thuật. 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 băm có khóa nào, nhưng theo bảng 14.2, mỗi lớp hỗ trợ
các chiều dài khóa khác nhau nên bạn phải cung cấp giá trị này trong mã lệnh tổng quát.
Nếu sử dụng phương thức khởi dựng để tạo đối tượng băm có khóa, bạn có thể truyền khóa
cho phương thức này. Khi sử dụng factory, bạn phải thiết lập khóa bằng thuộc tính

Key

(được

thừa kế từ lớp

KeyedHashAlgorithm

). Một khi đã cấu hình khóa, gọi phương thức

ComputeHash

với đối số là một mảng byte hay một đối tượng

System.IO.Stream

. Giải thuật băm có khóa sẽ

xử lý dữ liệu nhập và trả về một mảng byte chứa mã băm có khóa. Bảng 14.2 cho thấy kích
thước của mã băm do mỗi giải thuật băm có khóa sinh ra.
Lớp

KeyedHashStreamExample

dưới đây trình bày cách tạo mã băm có khóa từ một file. Bạn

phải chỉ định tên file và một khóa làm đối số dòng lệnh. Ứng dụng này sử dụng lớp

HMACSHA1

để tạo mã băm có khóa và rồi hiển thị nó ra cửa sổ Console.

using System;

using System.IO;

using System.Text;

using System.Security.Cryptography;

public class KeyedHashStreamExample {

public static void Main(string[] args) {

// Tạo mảng byte từ chuỗi key (là đối số dòng lệnh thứ hai).

byte[] key = Encoding.Unicode.GetBytes(args[1]);

// Tạo một đối tượng HMACSHA1

// (truyền key cho phương thức khởi dựng).

using (HMACSHA1 hashAlg = new HMACSHA1(key)) {

// Mở một FileStream để đọc file (tên file

// được chỉ định trong đối số dòng lệnh thứ nhất).

using (Stream file = new FileStream(args[0],

FileMode.Open)) {

// Tạo mã băm có khóa cho nội dung file.

byte[] hash = hashAlg.ComputeHash(file);

// Hiển thị mã băm có khóa ra cửa sổ Console.

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.