es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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?

Tags:  , , ,

Answer

  1. Avatar for 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étodo update() del objeto Signature, no el texto encriptado.

    Para verificar la firma correctamente, utilize el siguiente código:

    Signature sig = Signature.getInstance("SHA256withRSA");
    sig.initVerify(kp.getPublic());
    sig.update(plaintext);
    boolean result = sig.verify(encryptText);
    System.out.println(result); //Esto devolverá verdad (true)
    

    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.

Comments are closed.