Foros del Web » Programación para mayores de 30 ;) » Java »

Necesito ayuda para verificar la firma que contiene un XML

Estas en el tema de Necesito ayuda para verificar la firma que contiene un XML en el foro de Java en Foros del Web. Tengo un XML el cual me entrega la información de la llave publica para firmar un archivo, la información del XML la coloco en el ...
  #1 (permalink)  
Antiguo 18/04/2005, 11:10
 
Fecha de Ingreso: abril-2005
Mensajes: 1
Antigüedad: 19 años, 1 mes
Puntos: 0
Necesito ayuda para verificar la firma que contiene un XML

Tengo un XML el cual me entrega la información de la llave publica para firmar un archivo, la información del XML la coloco en el programa para verifica la firma pero no me funciona.
Lo que necesito es verificar la firma de dicho documento, yo probé generándome las llaves publica y privada con “KeyPairGenerator”, firmando el archivo y funciono correctamente pero lo que necesito es que la firma se verifique con la llave publica que me proporciona el XML por favor agradecería si me pueden ayudar.
Atte: Patricio González


import java.math.BigInteger;
import java.util.*;

import java.security.AlgorithmParameters;
import java.security.InvalidKeyException;
import java.security.Key;
import java.security.KeyFactory;
import java.security.KeyFactorySpi;
import java.security.NoSuchAlgorithmException;
import java.security.PrivateKey;
import java.security.PublicKey;

import java.security.spec.DSAParameterSpec;
import java.security.spec.DSAPrivateKeySpec;
import java.security.spec.DSAPublicKeySpec;
import java.security.spec.InvalidParameterSpecException;
import java.security.spec.InvalidKeySpecException;
import java.security.spec.KeySpec;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.RSAPrivateCrtKeySpec;
import java.security.spec.RSAPublicKeySpec;
import java.security.spec.X509EncodedKeySpec;
import java.io.*;
import java.security.*;
import java.security.spec.*;
import sun.misc.*;
import java.net.*;

class GenFirma3 {

public static void main(String[] args) {

/* Generate a RSA signature */



String mod="xaU64WV8j6hPl4esqbUrzA3klTavr5jEFITkiGZe99G9c/igMnTwOTfi8Y7tbr1LTHm0rcoKYg37m5hOnResRw==";
String exp="Aw==";
String datos="<DA><RE>96820900-0</RE><RS>ATCOM TELECOMUNICACIONES SOCIEDAD ANONIM</RS><TD>33</TD><RNG><D>1</D><H>10</H></RNG><FA>2005-01-11</FA><RSAPK><M>xaU64WV8j6hPl4esqbUrzA3klTavr5jEFITki GZe99G9c/igMnTwOTfi8Y7tbr1LTHm0rcoKYg37m5hOnResRw==</M><E>Aw==</E></RSAPK><IDK>100</IDK></DA>";
String firma="Q2I8WwHX4wAfw5efSL/T6yiWceHCDBFXfGBCU+lwQctYVghaNQaAkzgsPJydAf1u9Eob1 jRrnJ8VEgLnWX1VnQ==";
try{

byte[] bmod = mod.getBytes("UTF8");
byte[] bexp = exp.getBytes("UTF8");


//Pasar el Modulo y el Exponente a BigInteger
BigInteger modulo = new BigInteger(bmod);
BigInteger exponente = new BigInteger(bexp);
//Generar la llave Publica
RSAPublicKeySpec keySpec = new RSAPublicKeySpec( modulo, exponente );
KeyFactory keyFac = KeyFactory.getInstance( "RSA");
PublicKey pub = ( PublicKey ) keyFac.generatePublic( keySpec );


System.out.println("BYTE LLAVE = "+pub);
byte[] bf = firma.getBytes("UTF-8");

System.out.println("BYTE FIRMA = "+bf);
/* Save the public key in a file */
byte[] data1 =datos.getBytes("UTF-8");
System.out.println("BYTE DATA = "+data1);
Signature sig = Signature.getInstance("SHA1withRSA");
sig.initVerify(pub);

/* Save the public key in a file */
sig.update(data1);

boolean verifies = sig.verify(bf);
if(verifies==true)
{
System.out.println("LA FIRMA ES VALIDA");
}else
{
System.out.println("LA FIRMA NO ES VALIDA. POSIBLE IMPOSTOR");
}




} catch (Exception e) {
System.err.println("Caught exception " + e.toString());
}

}


}
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:40.