2008-09-23 60 views
6

Tôi đã được giao nhiệm vụ triển khai thư viện PKI trong C# cho một dự án của công ty và không thể tìm thấy việc triển khai tốt nó. Dường như có nhiều thư viện và nhiều liên kết bị hỏng trỏ đến các thư viện MSDN đã bị xóa. Tôi đã thấy mọi người sử dụng Crypt32.dll, mọi người xây dựng thư viện của riêng họ, mọi người sử dụng P/Invoke để truy cập kho chứng chỉ hệ thống, mọi người mở rộng các thư viện tích hợp, ví dụ đơn giản là không áp dụng cho C# (ví dụ Java ví dụ), và thư viện thương mại.Thư viện mã hóa?

Câu hỏi của tôi là việc triển khai/thư viện nào được khuyến nghị nhất cho việc mã hóa/giải mã dữ liệu đơn giản?

Là một số nền tảng cho những gì tôi dự định làm với nó, tôi chỉ cần mã hóa thư bằng khóa riêng (.pfx) và giải mã bằng khóa công cộng (.cer). Việc ký và xác thực thư không bắt buộc ở cấp độ dự án này, mặc dù có thể trong tương lai. Tôi đã thấy tham chiếu đến độ dài mã hóa khiến tôi khó chịu. Chúng tôi cần để có thể mã hóa bất kỳ tin nhắn độ dài (trong vòng lý do, tất nhiên!). Đây có phải là điều tôi cần phải lo lắng không, và nếu có, có cách nào để giải quyết nó không?

Tôi không muốn lưu trữ khóa công khai/riêng tư trong trình quản lý chứng chỉ windows nếu có thể, nhưng nếu nó giúp việc triển khai thực hiện đơn giản hơn đáng kể, do đó, hãy làm như vậy.

Tôi nhận PKI và mã hóa là một chủ đề lớn và phức tạp, nhưng tôi hy vọng cho một thư viện tương đối đơn giản anyway ... (người ta có thể hy vọng, phải không?)

Cảm ơn!

Trả lời

12

Vâng, bạn đã không đề cập đến lớp được xây dựng trong không bao gồm nhu cầu của bạn, vì vậy làm thế nào về System.Security.Cryptography.RSACryptoServiceProvider?

Đô thị này có một tập hợp lớn đủ điều kiện để mã hóa/giải mã các luồng không đối xứng.

Có một số hướng dẫn/hướng dẫn để đưa bạn trên đường đi:

http://www.codeproject.com/KB/security/RSACryptoPad.aspx

http://www.eggheadcafe.com/articles/20020630.asp

Có vô số nhiều hơn để được tìm thấy thông qua Google.

Cập nhật: Về giới hạn độ dài, sẽ không có vấn đề gì nếu bạn chỉ thực hiện cùng một thuật toán đệm trên cả hai mặt, mã hóa và giải mã.

Update2: Vâng, ví dụ của tôi là RSACryptoProvider, nhưng bạn có thể sử dụng bất kỳ lớp dẫn xuất từ ​​System.Security.Cryptography.AsymmetricAlgorithm, nếu bạn muốn public/private key-giải pháp. Hoặc xây dựng của riêng bạn ... hoặc có thể không :)

+0

Thực tế, toàn bộ không gian tên System.Security.Cryptography được áp dụng. Nó phải chứa tất cả các nguyên thủy cần thiết cho hầu hết các hệ thống mật mã. –

+0

Bạn có thể làm rõ về thuật toán đệm không? Additonally, tôi tự hỏi nếu điều này là tiêu chuẩn với RSA giải mã/mã hóa .. Một số mã hóa này sẽ được gửi cho khách hàng, và tôi không thể đảm bảo họ sẽ sử dụng cùng một thuật toán đệm tôi quyết định đi với. Đây có phải là một vấn đề, hay không? – Gabriel

0

Có, có gì sai với các lớp học tích hợp?

Và nếu bạn không muốn sử dụng lưu trữ chứng chỉ Windows mà bạn có thể sử dụng một cái gì đó như thế này

RSACryptoServiceProvider rscp = new RSACryptoServiceProvider(); 
rscp.FromXmlString("<RSAKeyValue><Modulus>key data gere</Modulus><Exponent></Exponent></RSAKeyValue>"); 

Không chắc rằng đây là một ý tưởng tốt cho các phím riêng, mặc dù.

Có hướng dẫn tốt về chủ đề here

Các vấn đề liên quan