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

566
Chương 14: Mật mã

int bufferLength;

byte[] buffer = new byte[1024];

// Đọc file đã-được-mật-hóa (từng khối 1024 byte) và ghi

// phiên bản đã-được-giải-mật-hóa ra file đích.

do {

bufferLength = srcFile.Read(buffer, 0, 1024);

cryptoStream.Write(buffer, 0, bufferLength);

} while (bufferLength > 0);

// Đóng stream và xóa các dữ liệu bí mật.

cryptoStream.FlushFinalBlock();

Array.Clear(key,0,key.Length);

Array.Clear(iv,0,iv.Length);

cryptoStream.Clear();

cryptoStream.Close();

srcFile.Close();

destFile.Close();

}

}

}

7.

7.

Truy l i khóa đ i x ng t password

ố ứ

Truy l i khóa đ i x ng t password

ố ứ

Bạn cần tạo một khóa đối xứng từ một password để người dùng chỉ cần nhớ
password và không cần lưu trữ khóa.

Sử dụng lớp

System.Security.Cryptography.PasswordDeriveBytes

để tạo khóa đối

xứng từ chuỗi password.

Hiếm có người nào nhớ được giá trị của một khóa đối xứng, và không thực tế khi bắt người
dùng nhập các số dài như thế bằng tay. Điều này nghĩa là khóa phải được lưu trữ ở một dạng
an toàn sao cho ứng dụng có thể truy xuất được (trong smart card, đĩa mềm, cơ sở dữ liệu hay
file). Vấn đề liên quan với việc cấp, phân bổ, truy xuất, và lưu trữ khóa là một trong những
mặt khó nhất trong quá trình hiện thực bất kỳ giải pháp mật mã nào (vấn đề này được quy
chung về quản lý khóa). Khi cần ghi nhớ một bí mật (khóa), bạn không chỉ lo bảo vệ dữ liệu
mà còn phải lo bảo vệ các bí mật dùng để bảo vệ dữ liệu!
Một cách lưu trữ khóa là cấp cho người dùng một password dễ nhớ hơn và sử dụng một giao
thức truy lại khóa (key derivation protocol) để tạo một khóa đối xứng từ password. Theo đó,

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.