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.