Algoritmo de cifrado / descifrado genérico en JRE (Sun / IBM)

1

¿Hay algún algoritmo de cifrado que sea genérico en todas las plataformas? ¿Es RSA genérico en SUN / IBM JRE?

Otra pregunta: ¿base64Encoder / base64Decoder sun.misc.BASE64Decode / sun.misc.BASE64Encoder se comportarán de la misma manera en IBM JRE?

¿También hay diferencias en el uso de estos algoritmos en los JRE de 32 bits / 64 bits? Si es así, ¿cómo abordarlos?

    
pregunta R23 28.05.2015 - 09:30
fuente

2 respuestas

6

La documentación de nombre estándar de la Arquitectura de criptografía de Java (JCE) contiene un sección sobre requisitos de implementación . Tanto para Java 7 como para Java 8 contiene las siguientes entradas para Cipher con respecto a RSA:

RSA/ECB/PKCS1Padding (1024, 2048)
RSA/ECB/OAEPWithSHA-1AndMGF1Padding (1024, 2048)
RSA/ECB/OAEPWithSHA-256AndMGF1Padding (1024, 2048)

para asegurarte de que obtuviste la correcta, especifica la cadena completa (excluyendo los tamaños de clave dentro de las tesis para padres, por supuesto). Entonces eso sería "RSA/ECB/OAEPWithSHA-1AndMGF1Padding" para el relleno OAEP.

RSA es un conjunto de algoritmos estandarizados internacionalmente (definidos en los estándares PKCS # 1 y los RFC derivados de esos estándares). Las implementaciones deben confirmar a los vectores de prueba para cualquier plataforma. RSA, por ejemplo, utiliza la codificación big endian, incluso en plataformas little endian.

El Base64Encoder es una clase interna de Sun. Incluso puede ser inconsistente en todas las implementaciones y puede desaparecer sin previo aviso. Lamentablemente, se usa mucho, por lo que Oracle y otros pueden decidir dejarlo en su lugar, por si acaso. Nunca debes usar las clases internas de Sun. Muchos validadores de código estático e incluso los IDE marcarán esto como un error.

Para tiempos de ejecución compatibles con Java 8, debe utilizar Base64 clase Para versiones anteriores debes ir con una biblioteca. El Apache Commons Codec se usa con frecuencia. Google Guava también se usa mucho y tiene un conjunto de códecs.

La Base 64 ha existido por mucho tiempo. No debe ejecutarse de forma diferente en 32 o 64 bits en ninguna plataforma, siempre y cuando esté seguro de utilizar la misma codificación de caracteres. Se debe preferir la codificación UTF-8, compatible con US ASCII para la base 64.

Finalmente, están las bibliotecas de Java Bouncy Castle y el proveedor. Las bibliotecas de Bouncy Castle contienen una cantidad cada vez mayor de funciones criptográficas que se pueden usar en cualquier tiempo de ejecución de Java. El proveedor se utiliza para permitir que gran parte de esta funcionalidad se use a través de Java JCA / JCE. Y, por supuesto, también contiene un Base64 clase en la API "lightweight".

Mientras use la API correctamente, Java es totalmente compatible con los procesadores de 32 y 64 bits, big endian o little endian. Ni siquiera debería importar si usas Linux, Windows, MacOS. Android también debería ser compatible, aunque no es una distribución oficial de Java.

    
respondido por el Maarten Bodewes 28.05.2015 - 10:57
fuente
0

Acerca del codificador base64: no debe usar los paquetes sun.misc, ya que no forman parte de la API oficial, por lo que es posible que estas clases no estén disponibles en otras máquinas virtuales.

Utilice el decodificador org.apache Base64.

RSA es un algoritmo / estándar de cifrado, por lo que con las claves de derechos debe cifrar / descifrar en las máquinas virtuales.

    
respondido por el morpheus05 28.05.2015 - 09:34
fuente

Lea otras preguntas en las etiquetas