Verificar datos con la clave pública de firma RSA en Java.
Tengo un texto simple.
Luego cifro este texto con RSA Cipher
.
Pero al verificar este texto con el texto cifrado por Signature
, siempre devuelve falso.
Generar par de claves:
KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA");
keyPairGen.initialize(2048);
KeyPair kp = keyPairGen.generateKeyPair();
Texto plano:
byte[] plaintext = "a".getBytes(StandardCharsets.UTF_8);
Cifrar texto usando RSA:
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE, kp.getPublic());
byte[] encryptText = cipher.doFinal(plaintext);
Verificar datos usando Signature
:
Signature sig = Signature.getInstance("SHA256withRSA");
sig.initVerify(kp.getPublic());
sig.update(plaintext);
boolean result = sig.verify(encryptText);
System.out.println(result);
¿Por qué este código siempre devuelve false
? ¿Cómo verificar de manera correcta?
davy.ai
El código siempre devuelve
false
porque la verificación se está realizando en el texto encriptado en lugar del texto plano original. Para verificar la firma, es necesario pasar el texto plano original al métodoupdate()
del objetoSignature
, no el texto encriptado.Para verificar la firma correctamente, utilize el siguiente código:
En resumen, el problema se debió a que se estaba utilizando la información incorrecta para verificar la firma. Al pasar el texto plano original al método
update()
, la verificación se realiza correctamente.