Question

J'ai été chargé de l'implémentation d'une bibliothèque PKI en C # pour un projet d'entreprise et je n'ai pas réussi à en trouver une bonne implémentation. Il semble y avoir plusieurs bibliothèques et de nombreux liens rompus pointant vers des bibliothèques MSDN qui ont été supprimées. J'ai vu des personnes utiliser Crypt32.dll, des personnes créant leurs propres bibliothèques, des personnes utilisant P / Invoke pour accéder à des magasins de certificats système, des personnes étendant des bibliothèques intégrées, des exemples qui ne s'appliquent tout simplement pas à C # (exemples Java par exemple), et bibliothèques commerciales.

Ma question est la suivante: quelle implémentation / bibliothèque est la plus recommandée pour le cryptage / décryptage simple des données?

Pour mieux comprendre ce que je prévois de faire, j’ai simplement besoin de chiffrer les messages à l’aide d’une clé privée (.pfx) et de les déchiffrer avec des clés publiques (.cer). La signature et l'authentification des messages ne sont pas nécessaires à ce niveau du projet, bien que cela puisse être le cas à l'avenir. J'ai vu des références aux longueurs de cryptage qui me rendent mal à l'aise. Nous devons être en mesure de chiffrer n'importe quel message de longueur (dans des limites raisonnables, bien sûr!). Est-ce quelque chose dont je dois m'inquiéter, et si oui, y a-t-il un moyen de le gérer?

Je préférerais ne pas stocker les clés publiques / privées dans le gestionnaire de certificats Windows dans la mesure du possible, mais si cela simplifie considérablement la mise en œuvre, faites-le.

Je réalise que le PKI et le chiffrement est un sujet vaste et complexe, mais j'espère une bibliothèque relativement simple de toute façon ... (on peut espérer, n'est-ce pas?)

Merci!

Était-ce utile?

La solution

Eh bien, vous n’avez pas mentionné que la classe intégrée ne répondait pas à vos besoins, c’est pourquoi System.Security.Cryptography.RSACryptoServiceProvider ?

Il dispose d'un grand ensemble de moyens qualifiés pour chiffrer / déchiffrer les flux de manière asymétrique.

Il existe plusieurs tutoriels / guides pour vous accompagner:

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

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

Il existe d'innombrables autres ressources disponibles dans Google .

Mise à jour : en ce qui concerne les restrictions de longueur, il ne devrait pas y avoir de problème si vous implémentez le même algorithme de tampon des deux côtés, chiffrement et déchiffrement.

Update2 : Oui, mon exemple était RSACryptoProvider , mais vous pouvez utiliser n'importe quelle classe dérivée de System.Security.Cryptography.AsymmetricAlgorithm , si vous souhaitez une clé publique / privée -Solution. Ou construisez le vôtre ... ou peut-être pas:)

Autres conseils

Oui, qu'est-ce qui ne va pas avec les classes intégrées?

Et si vous ne souhaitez pas utiliser le magasin de certificats Windows, vous pouvez utiliser quelque chose comme ceci

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

Pas sûr que ce soit une bonne idée pour les clés privées, cependant.

Il existe un bon tutoriel sur le sujet ici

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top