554
Chương 14: Mật mã
// Chuyển chuỗi password (đối số dòng lệnh thứ hai)
// thành một mảng byte.
byte[] pwordData = Encoding.Default.GetBytes(args[1]);
// Tạo mã băm của password.
byte[] hash = hashAlg.ComputeHash(pwordData);
// Hiển thị mã băm của password.
Console.WriteLine(BitConverter.ToString(hash));
}
}
}
Chạy lệnh
HashPasswordExample SHA1 ThisIsMyPassword
sẽ hiển thị mã băm sau đây:
80-36-31-2F-EA-D9-93-45-79-34-C9-FD-21-EE-8D-05-16-DC-A1-E2
3.
3.
Tính mã băm c a file
ủ
Tính mã băm c a file
ủ
Bạn cần xác định nội dung của một file có thay đổi theo thời gian hay không.
Tạo mã băm cho nội dung của file bằng phương thức
ComputeHash
của lớp
System.Security.Cryptography.HashAlgorithm
. Lưu trữ mã băm này để sau này
so sánh với các mã băm được tạo mới.
Ngoài việc cho phép bạn lưu trữ password một cách an toàn (đã được thảo luận trong mục
14.2), mã băm còn cung cấp một phương cách rất hay để xác định một file có thay đổi hay
không. Bằng cách tính toán và lưu trữ mã băm của một file, sau này bạn có thể tính lại mã
băm của file này để xác định file có thay đổi trong thời gian chuyển tiếp hay không. Giải thuật
băm sẽ sinh ra một mã băm rất khác ngay cả chỉ với một thay đổi rất nhỏ trong file, nên khả
năng hai file khác nhau cho ra cùng mã băm là cực kỳ nhỏ.
Các mã băm chuẩn không phù hợp khi gửi cùng với một file để bảo đảm tính
toàn vẹn của nội dung file. Nếu ai đó chặn được file trên đường đi, người này có
thể dễ dàng thay đổi file và tính lại mã băm. Chúng ta sẽ thảo luận một biến thể
của mã băm trong mục 14.5 (mã băm có khóa), mã băm này phù hợp cho việc
bảo đảm tính toàn vẹn của file trên đường đi.
Dễ dàng tạo được mã băm của một file với lớp
HashAlgorithm
. Trước hết, thể hiện hóa một
trong các hiện thực giải thuật băm dẫn xuất từ lớp
HashAlgorithm
(bạn cần truyền tên giải
thuật băm cho phương thức
HashAlgorithm.Create
—xem tên các giải thuật băm hợp lệ trong
bảng 14.1). Kế tiếp, thay vì truyền một mảng byte cho phương thức
ComputeHash
, bạn hãy
truyền một đối tượng
System.IO.Stream
mô tả file cần được tạo mã băm. Đối tượng