java - Crear PrivateKey desde una matriz de bytes
cryptography javacard (4)
Como se indica en los documentos de Java
Las claves generalmente se obtienen a través de generadores de claves, certificados o varias clases de Identidad utilizadas para administrar claves. Las claves también se pueden obtener a partir de las especificaciones clave (representaciones transparentes del material clave subyacente) mediante el uso de una fábrica de claves.
La clase KeyFactory puede ayudarte con esto.
¿Hay alguna manera de generar PrivateKey desde una matriz de bytes? Obtuve esta matriz de bytes usando el método getEncoded (), pero ahora debo convertirla a PrivateKey.
Gracias, Vuk
Bote la matriz codificada de bytes. En JavaCard AFAIR no tiene forma de decodificarlo directamente; debe configurar los diferentes componentes clave por separado.
Por ejemplo, un RSAPrivateKey necesita ser inicializado con el exponente y el módulo:
rsaPrivate = (RSAPrivateKey) javacard.security.KeyBuilder.buildKey
(javacard.security.KeyBuilder.TYPE_RSA_PRIVATE,
javacard.security.KeyBuilder.LENGTH_RSA_512, false);
byte[] exponent = {(byte) 7};
byte[] modulus = {(byte) 33};
rsaPrivate.setExponent(exponent, (short) 0, (short) exponent.length);
rsaPrivate.setModulus(modulus, (short) 0, (short) modulus.length);
Por cierto: para las preguntas de JavaCard, recomiendo el JavaCard Forum en los foros de Oracle. Si busca allí RSAPrivateKey, encontrará algunas publicaciones interesantes.
Estaba buscando esta respuesta también y finalmente la encontré. keyBytes es una matriz de bytes creada originalmente con getEncoded ().
//add BouncyCastle as a provider if you want
Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
//create a keyfactory - use whichever algorithm and provider
KeyFactory kf = KeyFactory.getInstance("DSA", "BC");
//for private keys use PKCS8EncodedKeySpec; for public keys use X509EncodedKeySpec
PKCS8EncodedKeySpec ks = new PKCS8EncodedKeySpec(keyBytes);
PrivateKey pk = kf.generatePrivate(ks);
Nunca he hecho nada para JavaCard, pero desde esta publicación , parece que puedes usar la clase KeyFactory. Probablemente necesites descargar la biblioteca de BouncyCastle.
O bien tiene que decodificar el blob codificado PKCS # 8 usted mismo (análisis BER ASN.1) y establecer los componentes, o puede obtener los componentes de la clave privada (al menos el exponente privado y el módulo) como BigIntegers de Java, convertirlos a arrays de bytes sin signo y establecerlos en Java Card API como explica Robert. El análisis PKCS # 8 se puede hacer en Java Card, pero es un ejercicio bastante horrendo.