2008-12-03 17 views
17

He podido encontrar información sobre cifrado simétrico y hash, pero he estado teniendo problemas para encontrar mucha información sobre cualquier tipo de cifrado de clave pública para java. Lo que me gustaría hacer es crear un programa de prueba de concepto muy simple que tome una cadena (o un archivo, supongo), lo encripta con una clave pública y luego lo descifra con una clave privada.¿Algún tutorial sobre cifrado de clave pública en java?

Se apreciarán todos los enlaces o ejemplos de tutoriales. Solo quiero hacer algo que demuestre cómo se puede usar el cifrado de clave pública en Java.

Respuesta

12

Hay bastantes recursos en la web sobre eso. Básicamente, da la vuelta a la clase KeyPairGenerator.

Consulte http://www.informit.com/articles/article.aspx?p=170967&seqNum=4 para ver un programa de ejemplo.

+0

Para el ejemplo que proporcionó, recibí el siguiente error: No se puede encontrar ningún proveedor compatible con RSA/NONE/PKCS1PADDING. Me pregunto si la copia de este equipo de Java no tiene implementado. –

+3

Pruebe RSA/ECB/PKCS1Padding. ECB es efectivamente un modo de encadenamiento de bloques "no". – erickson

13

Normalmente, utiliza el cifrado de clave pública para encriptar una clave simétrica, en parte porque el cifrado de clave pública es muy lento. Normalmente, le enviará al destinatario lo siguiente para que pueda descifrar su mensaje:

  1. La clave simétrica, encriptada con la clave pública del destinatario.
  2. Parámetros para los algoritmos utilizados, generalmente un vector de inicialización para el cifrado simétrico.
  3. Identificadores para los algoritmos de cifrado utilizados.
  4. El texto cifrado — es el mensaje real, cifrado con el cifrado simétrico.

Encontré el código de muestra en el JCE documentation suficiente para que las cosas funcionen.

El formato estándar para agrupar toda esta información es la Sintaxis de mensaje criptográfico, o CMS, que S/MIME utiliza en las aplicaciones de correo electrónico. Recomiendo usar Bouncy Castle's libraries; son sólidos, bastante simples y se mantienen activamente. La documentación de referencia es un poco débil, pero proporcionan ejemplos de código.

+0

En un dispositivo Android rooteado, no podemos poner la clave en el lado del cliente. Entonces, ¿qué podemos hacer ahora para descifrar el archivo en el cliente cifrado en el lado del servidor? Por favor vea mi pregunta relacionada: http://stackoverflow.com/questions/30951805/protected-document-viewer –

+0

@ Mr.Hyde Lo que está tratando de hacer es imposible. Es precisamente por eso que las personas hacen jailbreak a sus dispositivos: para deshabilitar el DRM que el fabricante intenta retener sobre el dispositivo. No puedes darle a alguien un secreto y aún controlar lo que hacen con él. – erickson

+0

Entonces, ¿qué es lo más cercano a la mejor solución? ¿Está bien? : Genere clave privada para cada servidor de archivos cifrados en el servidor y envíe la clave y el archivo cifrado al cliente. –

Cuestiones relacionadas