example - rsa c#
Bibliotecas de cifrado? (2)
Se me ha encomendado la tarea de implementar una biblioteca de PKI en C # para un proyecto de la compañía, y no he podido encontrar una buena implementación de la misma. Parece haber varias bibliotecas y muchos enlaces rotos que apuntan a las bibliotecas de MSDN que se han eliminado. He visto personas que usan Crypt32.dll, personas que crean sus propias bibliotecas, personas que usan P / Invoke para acceder a almacenes de certificados del sistema, personas que amplían las bibliotecas integradas, ejemplos que simplemente no se aplican a C # (por ejemplo, ejemplos de Java). y bibliotecas comerciales.
Mi pregunta es, ¿qué implementación / biblioteca es la más recomendada para el cifrado / descifrado simple de datos?
Como antecedentes de lo que planeo hacer con él, simplemente necesito encriptar mensajes usando una clave privada (.pfx) y descifrar con claves públicas (.cer). No se requiere la firma y autenticación de mensajes en este nivel del proyecto, aunque puede ser en el futuro. He visto referencias a longitudes de cifrado que me inquietan. Necesitamos poder encriptar cualquier mensaje de longitud (¡dentro de lo razonable, por supuesto!). ¿Debo preocuparme por esto? De ser así, ¿hay alguna forma de enfrentarlo?
Preferiría no almacenar claves públicas / privadas en el administrador de certificados de Windows si es posible, pero si hace la implementación significativamente más sencilla, que así sea.
Me doy cuenta de PKI y cifrado es un tema grande y complejo, pero estoy esperando una biblioteca relativamente simple de todos modos ... (uno puede esperar, ¿no?)
¡Gracias!
Bueno, no mencionó que la clase incorporada no cubre su necesidad, entonces ¿qué hay de System.Security.Cryptography.RSACryptoServiceProvider ?
Tiene un conjunto grande de formas calificadas para encriptar / descifrar de manera asimétrica los flujos.
Hay varios tutoriales / guías para llevarlo por el camino:
http://www.codeproject.com/KB/security/RSACryptoPad.aspx
http://www.eggheadcafe.com/articles/20020630.asp
Hay innumerables más que se pueden encontrar a través de Google .
Actualización : Acerca de los restricciones de longitud, no debería haber ningún problema si solo implementa el mismo algoritmo de búfer en ambos lados, cifrado y descifrado.
Actualización2 : Sí, mi ejemplo fue RSACryptoProvider , pero puede usar cualquier clase que derive de System.Security.Cryptography.AsymmetricAlgorithm , si desea una clave pública / privada-solución. O construye el tuyo ... o tal vez no :)
Sí, ¿qué pasa con las clases integradas?
Y si no quiere usar el almacén de certificados de Windows, puede usar algo como esto
RSACryptoServiceProvider rscp = new RSACryptoServiceProvider();
rscp.FromXmlString("<RSAKeyValue><Modulus>key data gere</Modulus><Exponent></Exponent></RSAKeyValue>");
Sin embargo, no estoy seguro de que esta sea una buena idea para claves privadas.
Hay un buen tutorial sobre el tema aquí