Библиотеки шифрования? - PullRequest
       7

Библиотеки шифрования?

7 голосов
/ 23 сентября 2008

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

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

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

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

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

Спасибо!

Ответы [ 2 ]

12 голосов
/ 23 сентября 2008

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

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

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

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

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

В Google .

можно найти множество других возможностей.

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

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

0 голосов
/ 23 сентября 2008

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

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

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

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

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

...