Các giải pháp lập trình CSharp- P70
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- P70: 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- P70 581 Chương 14: Mật mã // Trích khóa phiên từ dữ liệu trao đổi bằng // phương thức DeformatKeyExchange. byte[] sessionKey = DeformatKeyExchange(exchangeData, cspParams); // Hiển thị khóa phiên vừa được trích. Console.WriteLine(Session Key at Destination = {0}\n\r, BitConverter.ToString(sessionKey)); // Nhấn Enter để kết thúc. Console.ReadLine(); }}// Phương thức dùng để mật hóa và định dạng khóa phiên đối xứng.// Để mật hóa khóa phiên, chúng ta cần truy xuất PUBLIC KEY// của người nhận (trong cấu trúc RSAParameters).private static byte[] FormatKeyExchange(byte[] sessionKey, RSAParameters rsaParams) { // Tạo một giải thuật bất đối xứng RSA. using (RSACryptoServiceProvider asymAlg = new RSACryptoServiceProvider()) { // Nạp PUBLIC KEY của người nhận. asymAlg.ImportParameters(rsaParams); // Tạo một RSA OAEP formatter để định dạng dữ liệu trao đổi. RSAOAEPKeyExchangeFormatter formatter = new RSAOAEPKeyExchangeFormatter(); // Chỉ định giải thuật RSA dùng để mật hóa khóa phiên. formatter.SetKey(asymAlg); // Mật hóa và định dạng khóa phiên rồi trả về kết quả. return formatter.CreateKeyExchange(sessionKey); } 582 Chương 14: Mật mã } // Phương thức dùng để giải mật hóa dữ liệu trao đổi và trích khóa phiên // đối xứng. Để giải mật hóa dữ liệu trao đổi, chúng ta cần truy xuất // PRIVATE KEY (từ kho chứa khóa do đối số cspParams chỉ định). private static byte[] DeformatKeyExchange(byte[] exchangeData, CspParameters cspParams) { // Tạo một giải thuật bất đối xứng RSA. using (RSACryptoServiceProvider asymAlg = new RSACryptoServiceProvider(cspParams)) { // Tạo một RSA OAEP deformatter để trích khóa phiên // từ dữ liệu trao đổi. RSAOAEPKeyExchangeDeformatter deformatter = new RSAOAEPKeyExchangeDeformatter(); // Chỉ định giải thuật RSA dùng để giải mật hóa dữ liệu trao đổi. deformatter.SetKey(asymAlg); // Giải mật hóa dữ liệu trao đổi và trả về khóa phiên. return deformatter.DecryptKeyExchange(exchangeData); } }}Chạy KeyExchangeExample sẽ sinh ra kết xuất tương tự như sau:Session Key at Source = EE-5B-16-5B-AC-46-3D-72-CC-73-19-D9-0B-8A-19-E2-A6-02-13-BE-F8-CE-DF-40Exchange Data = 60-FA-3B-63-41-25-F1-AD-08-F9-FC-67-CD-C6-FB-3E-0F-C3-62-C6-3F-5C-C0-7E-D1-60-2D-19-58-07-EE-BB-7C-53-A5-C2-FB-CA-D7-64-FF-BA-33-77-AC-52-87-5F-75-E7-57-99-01-90-CD-70-36-1E-53-0C-82-C6-CE-B8-BC-8B-C9-39-6F-29-39-5F-6C-A6-43-E5-B0-A1-42-46-1C-9B-1C-72-EB-5E-67-06-44-C0-CE-AB-70-B8-39-8E-9F-01-E8-49-51-36-D6-27-09-94-DA-42-CE-79-C2-72-88-4D-CE-63-B4-A0-AC-07-AF-26-A7-76-DE-21-BE-A5Session Key at Destination = EE-5B-16-5B-AC-46-3D-72-CC-73-19-D9-0B-8A-19-E2-A6-02-13-BE-F8-CE-DF-40 583Chương 14: Mật mã584 Chương 15:KHẢ NĂNG LIÊN TÁC MÃ LỆNH KHÔNG- ĐƯỢC-QUẢN-LÝ 15585 586 Chương 15: Khả năng liên tác mã lệnh không-được-quản-lýM icrosoft .NET Framework là một nền cực kỳ cao vọng, là sự kết hợp của một ngôn ngữ mới (C#), một bộ thực thi được-quản-lý (CLR), một nền cho các ứng dụng Web (Microsoft ASP.NET), và một thư viện lớp rất lớn để xây dựng tất cả các kiểuứng dụng. Tuy nhiên, .NET Framework không lặp lại các tính năng có trong mã lệnh không-được-quản-lý. Hiện thời, .NET Framework không bao gồm mọi hàm có trong Win32 API,trong khi nhiều doanh nghiệp đang sử dụng các giải pháp phức tạp được xây dựng với cácngôn ngữ dựa-trên-COM như Microsoft Visual Basic 6 và Microsoft Visual C++ 6. May mắnlà Microsoft không có ý để những doanh nghiệp đó bỏ đi nền tảng mã lệnh mà họ đã xây dựngkhi chuyển sang nền .NET. Thay vào đó, .NET Framework được trang bị với các tính nănginteroperability (khả năng liên tác), cho phép bạn sử dụng lại mã lệnh cũ (legacy code) trongcác ứng dụng .NET Framework và truy xuất các assembly .NET như thể chúng là các thànhphần COM. Chương này sẽ thảo luận các vấn đề sau: Cách gọi các hàm thuộc DLL không-được-quản-lý (mục 15.1 đến 15.5). Cách sử dụng thành phần COM trong ứng dụng .NET Framework (mục 15.6 đến 15.8). Cách sử dụng điều kiểm ActiveX trong ứng dụng .NET Framework (mục 15.9). Cách tạo một thành phần .NET sao cho một COM-client có thể sử dụng nó (mục 15.10).1. Gọi một hàm trong một DLL không-được-quản-lý Bạn cần gọi một hàm C trong một DLL. Đây có thể là một hàm của Win32 API hoặc do bạn viết. Khai báo một phương thức trong mã C# mà bạn sẽ sử dụng để truy xuất hàm không-được-quản-lý. Khai báo phương thức này là static và extern, áp dụng đặc tính System.Runtime.InteropServices.DllImportAttribute để chỉ định file DLL và tên của hàm cần dùng.Để sử dụng một hàm C từ một thư viện ngoài, bạn chỉ cần khai báo nó một cách thích hợp.CRL sẽ tự động đảm trách phần việc còn lại, bao gồm việc tải DLL vào bộ nhớ khi hàm đượcgọi và chuyển các thông số từ kiểu dữ liệu .NET thành kiểu dữ liệu C.Dịch vụ .NET hỗ trợ việc thực thi xuyên-nền này có tên là PInvoke (Platform Invoke), và quátrình này thường là trong suốt đối với người sử dụng. Thỉnh thoảng, bạn sẽ cần thực hiện thêmmột số việc, chẳng hạn cần hỗ trợ cấu trúc trong-bộ-nhớ (in-memory structure), callback, haychuỗi có thể thay đổi (mutable string).PInvoke thường được sử dụng để truy xuất các hàm Win32 API, đặc biệt là các tính năngkhông có trong các lớp được-quản-lý thuộc .NET Framework. Các ví dụ được trình bày trongchươ ...
Nội dung trích xuất từ tài liệu:
Các giải pháp lập trình CSharp- P70 581 Chương 14: Mật mã // Trích khóa phiên từ dữ liệu trao đổi bằng // phương thức DeformatKeyExchange. byte[] sessionKey = DeformatKeyExchange(exchangeData, cspParams); // Hiển thị khóa phiên vừa được trích. Console.WriteLine(Session Key at Destination = {0}\n\r, BitConverter.ToString(sessionKey)); // Nhấn Enter để kết thúc. Console.ReadLine(); }}// Phương thức dùng để mật hóa và định dạng khóa phiên đối xứng.// Để mật hóa khóa phiên, chúng ta cần truy xuất PUBLIC KEY// của người nhận (trong cấu trúc RSAParameters).private static byte[] FormatKeyExchange(byte[] sessionKey, RSAParameters rsaParams) { // Tạo một giải thuật bất đối xứng RSA. using (RSACryptoServiceProvider asymAlg = new RSACryptoServiceProvider()) { // Nạp PUBLIC KEY của người nhận. asymAlg.ImportParameters(rsaParams); // Tạo một RSA OAEP formatter để định dạng dữ liệu trao đổi. RSAOAEPKeyExchangeFormatter formatter = new RSAOAEPKeyExchangeFormatter(); // Chỉ định giải thuật RSA dùng để mật hóa khóa phiên. formatter.SetKey(asymAlg); // Mật hóa và định dạng khóa phiên rồi trả về kết quả. return formatter.CreateKeyExchange(sessionKey); } 582 Chương 14: Mật mã } // Phương thức dùng để giải mật hóa dữ liệu trao đổi và trích khóa phiên // đối xứng. Để giải mật hóa dữ liệu trao đổi, chúng ta cần truy xuất // PRIVATE KEY (từ kho chứa khóa do đối số cspParams chỉ định). private static byte[] DeformatKeyExchange(byte[] exchangeData, CspParameters cspParams) { // Tạo một giải thuật bất đối xứng RSA. using (RSACryptoServiceProvider asymAlg = new RSACryptoServiceProvider(cspParams)) { // Tạo một RSA OAEP deformatter để trích khóa phiên // từ dữ liệu trao đổi. RSAOAEPKeyExchangeDeformatter deformatter = new RSAOAEPKeyExchangeDeformatter(); // Chỉ định giải thuật RSA dùng để giải mật hóa dữ liệu trao đổi. deformatter.SetKey(asymAlg); // Giải mật hóa dữ liệu trao đổi và trả về khóa phiên. return deformatter.DecryptKeyExchange(exchangeData); } }}Chạy KeyExchangeExample sẽ sinh ra kết xuất tương tự như sau:Session Key at Source = EE-5B-16-5B-AC-46-3D-72-CC-73-19-D9-0B-8A-19-E2-A6-02-13-BE-F8-CE-DF-40Exchange Data = 60-FA-3B-63-41-25-F1-AD-08-F9-FC-67-CD-C6-FB-3E-0F-C3-62-C6-3F-5C-C0-7E-D1-60-2D-19-58-07-EE-BB-7C-53-A5-C2-FB-CA-D7-64-FF-BA-33-77-AC-52-87-5F-75-E7-57-99-01-90-CD-70-36-1E-53-0C-82-C6-CE-B8-BC-8B-C9-39-6F-29-39-5F-6C-A6-43-E5-B0-A1-42-46-1C-9B-1C-72-EB-5E-67-06-44-C0-CE-AB-70-B8-39-8E-9F-01-E8-49-51-36-D6-27-09-94-DA-42-CE-79-C2-72-88-4D-CE-63-B4-A0-AC-07-AF-26-A7-76-DE-21-BE-A5Session Key at Destination = EE-5B-16-5B-AC-46-3D-72-CC-73-19-D9-0B-8A-19-E2-A6-02-13-BE-F8-CE-DF-40 583Chương 14: Mật mã584 Chương 15:KHẢ NĂNG LIÊN TÁC MÃ LỆNH KHÔNG- ĐƯỢC-QUẢN-LÝ 15585 586 Chương 15: Khả năng liên tác mã lệnh không-được-quản-lýM icrosoft .NET Framework là một nền cực kỳ cao vọng, là sự kết hợp của một ngôn ngữ mới (C#), một bộ thực thi được-quản-lý (CLR), một nền cho các ứng dụng Web (Microsoft ASP.NET), và một thư viện lớp rất lớn để xây dựng tất cả các kiểuứng dụng. Tuy nhiên, .NET Framework không lặp lại các tính năng có trong mã lệnh không-được-quản-lý. Hiện thời, .NET Framework không bao gồm mọi hàm có trong Win32 API,trong khi nhiều doanh nghiệp đang sử dụng các giải pháp phức tạp được xây dựng với cácngôn ngữ dựa-trên-COM như Microsoft Visual Basic 6 và Microsoft Visual C++ 6. May mắnlà Microsoft không có ý để những doanh nghiệp đó bỏ đi nền tảng mã lệnh mà họ đã xây dựngkhi chuyển sang nền .NET. Thay vào đó, .NET Framework được trang bị với các tính nănginteroperability (khả năng liên tác), cho phép bạn sử dụng lại mã lệnh cũ (legacy code) trongcác ứng dụng .NET Framework và truy xuất các assembly .NET như thể chúng là các thànhphần COM. Chương này sẽ thảo luận các vấn đề sau: Cách gọi các hàm thuộc DLL không-được-quản-lý (mục 15.1 đến 15.5). Cách sử dụng thành phần COM trong ứng dụng .NET Framework (mục 15.6 đến 15.8). Cách sử dụng điều kiểm ActiveX trong ứng dụng .NET Framework (mục 15.9). Cách tạo một thành phần .NET sao cho một COM-client có thể sử dụng nó (mục 15.10).1. Gọi một hàm trong một DLL không-được-quản-lý Bạn cần gọi một hàm C trong một DLL. Đây có thể là một hàm của Win32 API hoặc do bạn viết. Khai báo một phương thức trong mã C# mà bạn sẽ sử dụng để truy xuất hàm không-được-quản-lý. Khai báo phương thức này là static và extern, áp dụng đặc tính System.Runtime.InteropServices.DllImportAttribute để chỉ định file DLL và tên của hàm cần dùng.Để sử dụng một hàm C từ một thư viện ngoài, bạn chỉ cần khai báo nó một cách thích hợp.CRL sẽ tự động đảm trách phần việc còn lại, bao gồm việc tải DLL vào bộ nhớ khi hàm đượcgọi và chuyển các thông số từ kiểu dữ liệu .NET thành kiểu dữ liệu C.Dịch vụ .NET hỗ trợ việc thực thi xuyên-nền này có tên là PInvoke (Platform Invoke), và quátrình này thường là trong suốt đối với người sử dụng. Thỉnh thoảng, bạn sẽ cần thực hiện thêmmột số việc, chẳng hạn cần hỗ trợ cấu trúc trong-bộ-nhớ (in-memory structure), callback, haychuỗi có thể thay đổi (mutable string).PInvoke thường được sử dụng để truy xuất các hàm Win32 API, đặc biệt là các tính năngkhông có trong các lớp được-quản-lý thuộc .NET Framework. Các ví dụ được trình bày trongchươ ...
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 -
142 trang 129 0 0
-
161 trang 129 1 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