PORRRRRR FINNNNNNNNN LO HE CONSEGUIDO, hay que ver la de tiempo que me he tirado... puff.
Al final he descubierto que solo se puede hacer lo siguiente:
Mediante esta página:
http://codeartisan.blogspot.com/2009...y-in-java.html
Hay que seguir estos pasos a hacer con tu clave privada para generar una nueva clave pública válida en JAVA.
# generate a 2048-bit RSA private key
$ openssl genrsa -out private_key.pem 2048
# convert private Key to PKCS#8 format (so Java can read it)
$ openssl pkcs8 -topk8 -inform PEM -outform DER -in private_key.pem \
-out private_key.der -nocrypt
# output public key portion in DER format (so Java can read it)
$ openssl rsa -in private_key.pem -pubout -outform DER -out public_key.der
Después os aseguro que funciona:
Código:
public static PublicKey get(String filename)
throws Exception {
File f = new File(filename);
FileInputStream fis = new FileInputStream(f);
DataInputStream dis = new DataInputStream(fis);
byte[] keyBytes = new byte[(int)f.length()];
dis.readFully(keyBytes);
dis.close();
X509EncodedKeySpec spec =
new X509EncodedKeySpec(keyBytes);
KeyFactory kf = KeyFactory.getInstance("RSA");
return kf.generatePublic(spec);
}
Este código os permitirá conseguir la clavePública desde un fichero.
Código:
public static boolean verifySig(byte[] data, PublicKey key, byte[] sig) throws Exception {
Signature signer = Signature.getInstance("SHA1withRSA");
signer.initVerify(key);
signer.update(data);
return (signer.verify(sig));
}
Este os permitirá verificar la firma digital.
Cuando leáis la firma como tenéis que pasarla en binario si la leeis de algún sitio que esté en hexadecimal:
byte[] signature = new BigInteger(keyzamSignature, 16).toByteArray();
Y ya está ahí acaba mi quebradero de cabeza durante 8 días.