Các giải pháp lập trình CSharp- P68
Số trang: 10
Loại file: pdf
Dung lượng: 2.65 MB
Lượt xem: 3
Lượt tải: 0
Xem trước 2 trang đầu tiên của tài liệu này:
Thông tin tài liệu:
Các giải pháp lập trình CSharp- P68: Các giải pháp lập trình C# khảo sát chiều rộng của thư viện lớp .NET Framework và cung cấp giải pháp cụ thể cho các vấn đềthường gặp. Mỗi giải pháp được trình bày theo dạng “vấn đề/giải pháp” một cách ngắn gọn và kèm theo là các ví dụ mẫu.
Nội dung trích xuất từ tài liệu:
Các giải pháp lập trình CSharp- P68 561 Chương 14: Mật mã DES DESCryptoServiceProvider 64 TripleDES hay 3DES TripleDESCryptoServiceProvider 128, 192 40, 48 56, 64, 72, 80, RC2 RC2CryptoServiceProvider 88, 96, 104, 112, 120, 128 Rijndael RijndaelManaged 128, 192, 256Mặc dù bạn có thể tạo ra các thể hiện của các lớp giải thuật đối xứng một cách trực tiếp, lớpcơ sở SymmetricAlgorithm là một factory cho các lớp hiện thực cụ thể dẫn xuất từ đó. Gọiphương thức tĩnh SymmetricAlgorithm.Create với đối số là tên giải thuật sẽ trả về một đốitượng thuộc kiểu đã được chỉ định. 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 đối xứng nào:string algName = 3DES;SymmetricAlgorithm alg = SymmetricAlgorithm.Create(algName); Nếu bạn gọi SymmetricAlgorithm.Create và không chỉ định tên giải thuật, SymmetricAlgorithm sẽ trả về một đối tượng RijndaelManaged. Nếu bạn chỉ định một giá trị không hợp lệ, SymmetricAlgorithm sẽ trả về null. Bạn có thể cấu hình các ánh xạ tên/lớp mới bằng file cấu hình (xem tài liệu .NET Framework SDK để biết thêm chi tiết).Trước khi mật hóa dữ liệu với một trong các lớp giải thuật đối xứng, bạn cần một khóa (key)và một vectơ khởi động (initialization vector). Khóa là thông tin bí mật dùng để mật hóa vàgiải mật hóa dữ liệu. Vectơ khởi động là dữ liệu ngẫu nhiên được truyền cho giải thuật mậthóa. Bạn phải sử dụng cùng khóa và vectơ khởi động cho cả mật hóa và giải mật hóa dữ liệu.Tuy nhiên, chỉ có khóa là cần phải được giữ bí mật, bạn có thể lưu trữ hay gửi vectơ khởiđộng cùng với dữ liệu đã-được-mật-hóa.Khóa cho mỗi lớp dẫn xuất từ SymmetricAlgorithm có thể được truy xuất thông qua thuộc tínhKey, và vectơ khởi động có thể được truy xuất thông qua thuộc tính IV. Cách đơn giản nhất vàít lỗi nhất để tạo khóa và vectơ khởi động mới là để lớp tự tạo chúng giùm bạn. Sau khi đã tạomột đối tượng giải thuật đối xứng, nếu bạn không thiết lập các thuộc tính Key và IV cho nó,đối tượng này sẽ tự động tạo ra các giá trị mới ngay khi bạn cho gọi một thành viên có sửdụng các giá trị Key và IV. Một khi đã được thiết lập, đối tượng giải thuật đối xứng sẽ tiếp tụcsử dụng các giá trị Key và IV này. Để thay đổi giá trị của Key và IV, bạn có thể gán trực tiếpcác giá trị mới hoặc gọi phương thức GenerateKey và GenerateIV (buộc đối tượng giải thuậtđối xứng tạo ra các giá trị ngẫu nhiên mới).Bạn không thể trực tiếp thực hiện mật hóa và giải mật hóa với một đối tượng giải thuật đốixứng. Một khi đã tạo và cấu hình đối tượng giải thuật đối xứng, bạn phải gọi phương thứcCreateEncryptor hay CreateDecryptor của nó để thu lấy một đối tượng có hiện thực giao diệnSystem.Security.Cryptography.ICryptoTransform. Kế đó, bạn có thể sử dụng các phươngthức của đối tượng ICryptoTransform này để mật hóa và giải mật hóa dữ liệu. Tuy nhiên, đốitượng ICryptoTransform yêu cầu bạn truyền dữ liệu theo từng khối (có kích thước cố định) vàlấp (bằng tay) khối dữ liệu cuối cùng vì khối này ít khi có kích thước đúng. 562 Chương 14: Mật mãGiao diện ICryptoTransform không quá khó sử dụng, nhưng không mấy thân thiện; do vậy.NET Framework kèm thêm lớp System.Security.Cryptography.CryptoStream. Đây là lớpdẫn xuất từ System.IO.Stream, dùng để đơn giản hóa việc mật hóa và giải mật hóa dữ liệuđược đọc từ các đối tượng Stream khác. Lớp này cho phép bạn mật hóa và giải mật hóa dữliệu từ các file và các kết nối mạng một cách dễ dàng bằng một mô hình xử lý quen thuộc, vànó cung cấp cho bạn tất cả các tiện ích quen thuộc khi truy xuất dữ liệu dựa-vào-Stream.Phương thức khởi dựng của CryptoStream yêu cầu ba đối số: một Stream nằm dưới, một thểhiện của ICryptoTransform, và một giá trị thuộc kiểu liệt kêSystem.Security.Cryptography.CryptoStreamMode. Giá trị CryptoStreamMode cho biết chế độcủa đối tượng CryptoStream mới; các giá trị hợp lệ là Read và Write. Khi bạn gọi phương thứcRead hay Write của CryptoStream, CryptoStream sẽ sử dụng thể hiện ICryptoTransform đểmật hóa và giải mật hóa dữ liệu đang truyền qua CryptoStream. Đối tượng CryptoStream bảođảm kích thước khối dùng cho thể hiện ICryptoTransform luôn đúng.Cấu hình của một đối tượng CryptoStream có tính linh hoạt cao, nhưng có thể hơi khó hiểu.Bảng 14.4 mô tả hoạt động của một đối tượng CryptoStream dựa trên chế độ củaCryptoStream và kiểu thể hiện ICryptoTransform được sử dụng trong phương thức khởi dựngcủa CryptoStream.Bảng 14.4 Hoạt động của đối tượng CryptoStream Chế độ của Chỉ thị của Mô tả CryptoStream ICryptoTransform Stream nằm dưới chứa plaintext nguồn. Read Mật hóa CryptoStream.Read ghi ciphertext ra bộ đệm xuất. Stream nằm dưới chứa ciphertext nguồn. Read Giải mật hóa CryptoStream.Read ghi plaintext ra bộ đệm xuất. CryptoStream.Write chỉ định plaintext cần mật hóa. Write Mật hóa Stream nằm dưới nhận ciphertext đã-được-mật-hóa. CryptoStream.Write chỉ định ciphertext cần giải mật Write Giải mật hóa hóa. Stream nằm dưới nhận plaintext đã-được-giải- ...
Nội dung trích xuất từ tài liệu:
Các giải pháp lập trình CSharp- P68 561 Chương 14: Mật mã DES DESCryptoServiceProvider 64 TripleDES hay 3DES TripleDESCryptoServiceProvider 128, 192 40, 48 56, 64, 72, 80, RC2 RC2CryptoServiceProvider 88, 96, 104, 112, 120, 128 Rijndael RijndaelManaged 128, 192, 256Mặc dù bạn có thể tạo ra các thể hiện của các lớp giải thuật đối xứng một cách trực tiếp, lớpcơ sở SymmetricAlgorithm là một factory cho các lớp hiện thực cụ thể dẫn xuất từ đó. Gọiphương thức tĩnh SymmetricAlgorithm.Create với đối số là tên giải thuật sẽ trả về một đốitượng thuộc kiểu đã được chỉ định. 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 đối xứng nào:string algName = 3DES;SymmetricAlgorithm alg = SymmetricAlgorithm.Create(algName); Nếu bạn gọi SymmetricAlgorithm.Create và không chỉ định tên giải thuật, SymmetricAlgorithm sẽ trả về một đối tượng RijndaelManaged. Nếu bạn chỉ định một giá trị không hợp lệ, SymmetricAlgorithm sẽ trả về null. Bạn có thể cấu hình các ánh xạ tên/lớp mới bằng file cấu hình (xem tài liệu .NET Framework SDK để biết thêm chi tiết).Trước khi mật hóa dữ liệu với một trong các lớp giải thuật đối xứng, bạn cần một khóa (key)và một vectơ khởi động (initialization vector). Khóa là thông tin bí mật dùng để mật hóa vàgiải mật hóa dữ liệu. Vectơ khởi động là dữ liệu ngẫu nhiên được truyền cho giải thuật mậthóa. Bạn phải sử dụng cùng khóa và vectơ khởi động cho cả mật hóa và giải mật hóa dữ liệu.Tuy nhiên, chỉ có khóa là cần phải được giữ bí mật, bạn có thể lưu trữ hay gửi vectơ khởiđộng cùng với dữ liệu đã-được-mật-hóa.Khóa cho mỗi lớp dẫn xuất từ SymmetricAlgorithm có thể được truy xuất thông qua thuộc tínhKey, và vectơ khởi động có thể được truy xuất thông qua thuộc tính IV. Cách đơn giản nhất vàít lỗi nhất để tạo khóa và vectơ khởi động mới là để lớp tự tạo chúng giùm bạn. Sau khi đã tạomột đối tượng giải thuật đối xứng, nếu bạn không thiết lập các thuộc tính Key và IV cho nó,đối tượng này sẽ tự động tạo ra các giá trị mới ngay khi bạn cho gọi một thành viên có sửdụng các giá trị Key và IV. Một khi đã được thiết lập, đối tượng giải thuật đối xứng sẽ tiếp tụcsử dụng các giá trị Key và IV này. Để thay đổi giá trị của Key và IV, bạn có thể gán trực tiếpcác giá trị mới hoặc gọi phương thức GenerateKey và GenerateIV (buộc đối tượng giải thuậtđối xứng tạo ra các giá trị ngẫu nhiên mới).Bạn không thể trực tiếp thực hiện mật hóa và giải mật hóa với một đối tượng giải thuật đốixứng. Một khi đã tạo và cấu hình đối tượng giải thuật đối xứng, bạn phải gọi phương thứcCreateEncryptor hay CreateDecryptor của nó để thu lấy một đối tượng có hiện thực giao diệnSystem.Security.Cryptography.ICryptoTransform. Kế đó, bạn có thể sử dụng các phươngthức của đối tượng ICryptoTransform này để mật hóa và giải mật hóa dữ liệu. Tuy nhiên, đốitượng ICryptoTransform yêu cầu bạn truyền dữ liệu theo từng khối (có kích thước cố định) vàlấp (bằng tay) khối dữ liệu cuối cùng vì khối này ít khi có kích thước đúng. 562 Chương 14: Mật mãGiao diện ICryptoTransform không quá khó sử dụng, nhưng không mấy thân thiện; do vậy.NET Framework kèm thêm lớp System.Security.Cryptography.CryptoStream. Đây là lớpdẫn xuất từ System.IO.Stream, dùng để đơn giản hóa việc mật hóa và giải mật hóa dữ liệuđược đọc từ các đối tượng Stream khác. Lớp này cho phép bạn mật hóa và giải mật hóa dữliệu từ các file và các kết nối mạng một cách dễ dàng bằng một mô hình xử lý quen thuộc, vànó cung cấp cho bạn tất cả các tiện ích quen thuộc khi truy xuất dữ liệu dựa-vào-Stream.Phương thức khởi dựng của CryptoStream yêu cầu ba đối số: một Stream nằm dưới, một thểhiện của ICryptoTransform, và một giá trị thuộc kiểu liệt kêSystem.Security.Cryptography.CryptoStreamMode. Giá trị CryptoStreamMode cho biết chế độcủa đối tượng CryptoStream mới; các giá trị hợp lệ là Read và Write. Khi bạn gọi phương thứcRead hay Write của CryptoStream, CryptoStream sẽ sử dụng thể hiện ICryptoTransform đểmật hóa và giải mật hóa dữ liệu đang truyền qua CryptoStream. Đối tượng CryptoStream bảođảm kích thước khối dùng cho thể hiện ICryptoTransform luôn đúng.Cấu hình của một đối tượng CryptoStream có tính linh hoạt cao, nhưng có thể hơi khó hiểu.Bảng 14.4 mô tả hoạt động của một đối tượng CryptoStream dựa trên chế độ củaCryptoStream và kiểu thể hiện ICryptoTransform được sử dụng trong phương thức khởi dựngcủa CryptoStream.Bảng 14.4 Hoạt động của đối tượng CryptoStream Chế độ của Chỉ thị của Mô tả CryptoStream ICryptoTransform Stream nằm dưới chứa plaintext nguồn. Read Mật hóa CryptoStream.Read ghi ciphertext ra bộ đệm xuất. Stream nằm dưới chứa ciphertext nguồn. Read Giải mật hóa CryptoStream.Read ghi plaintext ra bộ đệm xuất. CryptoStream.Write chỉ định plaintext cần mật hóa. Write Mật hóa Stream nằm dưới nhận ciphertext đã-được-mật-hóa. CryptoStream.Write chỉ định ciphertext cần giải mật Write Giải mật hóa hóa. Stream nằm dưới nhận plaintext đã-được-giải- ...
Tìm kiếm theo từ khóa liên quan:
kinh nghiệm lập trình CSharp mẹo lập trình ngôn ngữ lập trình C giáo trình lập trình CSharp lập trình java lập trình căn bản CSharpGợi ý tài liệu liên quan:
-
Thủ thuật giúp giải phóng dung lượng ổ cứng
4 trang 210 0 0 -
NGÂN HÀNG CÂU HỎI TRẮC NGHIỆM THIẾT KẾ WEB
8 trang 202 0 0 -
101 trang 199 1 0
-
Tìm hiểu về ngôn ngữ lập trình C: Phần 1 - Quách Tuấn Ngọc
211 trang 149 0 0 -
161 trang 129 1 0
-
142 trang 129 0 0
-
Giáo trình Vi điều khiển PIC: Phần 1
119 trang 116 0 0 -
Bài giảng Phương pháp lập trình: Chương 9 - GV. Từ Thị Xuân Hiền
36 trang 109 0 0 -
Excel add in development in c and c phần 9
0 trang 107 0 0 -
78 trang 101 0 0