Вопрос

Мне было поручено реализовать библиотеку PKI на C# для проекта компании, и я не смог найти ее хорошую реализацию.Похоже, существует несколько библиотек и множество неработающих ссылок, указывающих на библиотеки MSDN, которые были удалены.Я видел людей, использующих Crypt32.dll, людей, создающих свои собственные библиотеки, людей, использующих P/Invoke для доступа к хранилищам системных сертификатов, людей, расширяющих встроенные библиотеки, примеры, которые просто не применимы к C# (например,примеры Java) и коммерческие библиотеки.

Мой вопрос: какая реализация/библиотека наиболее рекомендуется для простого шифрования/дешифрования данных?

В качестве основы того, что я планирую с ним делать, мне просто нужно зашифровать сообщения с помощью закрытого ключа (.pfx) и расшифровать с помощью открытых ключей (.cer).Подписание сообщений и аутентификация не требуются на этом уровне проекта, хотя это может потребоваться в будущем.Я видел ссылку на длину шифрования, которая меня беспокоит.Нам нужно иметь возможность шифровать сообщения любой длины (конечно, в пределах разумного!).Стоит ли мне беспокоиться об этом, и если да, то есть ли способ с этим справиться?

Я бы предпочел не хранить открытые/закрытые ключи в диспетчере сертификатов Windows, если это вообще возможно, но если это значительно упрощает реализацию, пусть будет так.

Я понимаю, что PKI и шифрование — это большая и сложная тема, но я все равно надеюсь на относительно простую библиотеку...(можно надеяться, правда?)

Спасибо!

Это было полезно?

Решение

Ну, вы не упомянули, что встроенный класс не удовлетворяет вашим потребностям, так как насчет System.Security.Cryptography.RSACryptoServiceProvider?

Он имеет большой набор квалифицированных способов асимметричного шифрования/дешифрования потоков.

Есть несколько учебных пособий/руководств, которые помогут вам:

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

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

Есть бесчисленное множество других, которые можно найти через Google.

Обновлять:Что касается ограничений длины, проблем не должно возникнуть, если вы просто реализуете один и тот же алгоритм буфера с обеих сторон, шифрование и дешифрование.

Обновление2:Да, мой пример был RSACryptoProvider, но вы можете использовать любой класс, производный от System.Security.Cryptography.AsymmetricAlgorithm, если вам нужно решение с открытым/закрытым ключом.Или построить свой собственный...а может и нет :)

Другие советы

Да, а что не так со встроенными классами?

И если вы не хотите использовать хранилище сертификатов Windows, вы можете использовать что-то вроде этого

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

Однако не уверен, что это хорошая идея для закрытых ключей.

Есть хороший урок по этой теме здесь

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top