Sự khác biệt giữa sử dụng Rfc2898DeriveBytes và chỉ sử dụng là Encoding.ASCII.GetBytes(string object);
gì?
Tôi đã thành công tương đối với một trong hai cách tiếp cận, cách tiếp cận đầu tiên là cách tiếp cận dài hơi hơn trong đó cách tiếp cận sau là đơn giản và đi vào trọng tâm. Cả hai dường như cho phép bạn làm điều tương tự cuối cùng nhưng tôi đang đấu tranh để thấy điểm trong việc sử dụng cái trước hơn cái sau.
Khái niệm cơ bản mà tôi có thể nắm được là bạn có thể chuyển đổi mật khẩu chuỗi thành mảng byte để sử dụng cho lớp mã hóa đối xứng, ví dụ AesManaged
. Qua lớp RFC nhưng bạn có thể sử dụng các giá trị muối và mật khẩu khi tạo đối tượng rfc của mình. Tôi cho rằng nó an toàn hơn nhưng tốt nhất đó vẫn chỉ là một phỏng đoán vô học! Ngoài ra, nó cho phép bạn trả về các mảng byte có kích thước nhất định, đại loại như vậy.
Dưới đây là một số ví dụ để bạn thấy tôi đến từ đâu:
byte[] myPassinBytes = Encoding.ASCII.GetBytes("some password");
hoặc là
string password = "P@%5w0r]>";
byte[] saltArray = Encoding.ASCII.GetBytes("this is my salt");
Rfc2898DeriveBytes rfcKey = new Rfc2898DeriveBytes(password, saltArray);
Đối tượng 'rfcKey' bây giờ có thể được sử dụng để thiết lập các thuộc tính .Key hoặc .IV trên một lớp thuật toán mã hóa đối xứng.
I E.
RijndaelManaged rj = new RijndaelManaged ();
rj.Key = rfcKey.Getbytes(rj.KeySize / 8);
rj.IV = rfcKey.Getbytes(rj.Blocksize / 8);
'rj' sẽ sẵn sàng hoạt động!
Phần khó hiểu ... vì vậy thay vì sử dụng đối tượng 'rfcKey', tôi có thể không sử dụng mảng 'myPassInBytes' để giúp thiết lập đối tượng 'rj' của mình không?
Tôi đã thử làm điều này trong VS2008 và câu trả lời ngay lập tức là KHÔNG. Nhưng các bạn đã có câu trả lời tốt hơn về lý do tại sao lớp RFC được sử dụng thay thế cho các phương thức thay thế khác mà tôi đã đề cập ở trên chưa?