Article View: es.comp.lenguajes.java
Article #26406Re: PKCS
From: jmoya
Date: Mon, 04 Jan 1999 00:00
Date: Mon, 04 Jan 1999 00:00
128 lines
4808 bytes
4808 bytes
Javier Medina wrote:
> Hola,
> Estoy buscando si alguien sabe de algunas APIs en JAVA, que
> implementen PKCS (Public Key Criptographic Standard), para codificar
> mensajes (PKCS-7), para la codificaci�n y decodificaci�n DER. Gracias
Hola Javier,
puedes encontrarlo en la propia distribucion del JDK.
Con el Winzip miras el contenido de la libreria classes.zip, y
veras que existe
sun.security.pkcs.PKCS7.class.
Si tienes tiempo y te interesa el tema, te recomiendo que descomprimas
todas las clases del paquete sun.security y posteriormente las
decompiles con algun programa, yo uso el JAD y no me ha fallado hasta
ahora.
Tan solo te hace falta intepretar como funcionan las clases que te
interesan a traves del codigo fuente.
Te informo que este paquete no lo implementa Netscape pero si
IExplorer, eso por si lo utilizas en un Applet.
Si lo unico que deseas es poder hacer la codificacion /descodificacion
DER
te adjunto un ejemplo de utilizacion de estas clases para realizarla,
en el veras como se codifica/descodifica una firma DSA.
Si estas interesado en el tema de firma digital DSA, y su uso a partir de
sus parametros p, q, g, x, y, r, s, te podria hechar una mano.
Sun no da informacion de como obtenerlas pero te aseguro que si se puede.
Si ademas quieres disponer de la API JCE1.2, ( Extension Cryptofracia de
Java ) saltandote las restricciones de SUN,
prueba a conectarte con un proxy de america de la manera siguiente:
http://anon.free.anonymizer.com/http://developer.java.sun.com/servlet/SessionServlet?action=showLogin&url=/developer/earlyAccess/jdk12/jce.html
necesitaras para esto darte de alta en el JDC.
Suerte,
Juan Moya
// ************************
import java.security.*;
import java.io.IOException;
import java.security.interfaces.*;
import sun.security.provider.DSAKeyPairGenerator;
import sun.security.provider.DSAPrivateKey;
import sun.security.provider.DSAPublicKey;
import sun.security.x509.AlgIdDSA;
import sun.security.util.BigInt;
import sun.security.util.DerOutputStream;
import sun.security.util.DerValue;
import sun.security.util.DerInputStream;
import java.math.BigInteger;
/**
* Obtengo la firma DSA codificada DER a partir de los parametros r,
s:
* Firma en ASN.1 : SEQUENCE { r Integer, s Integer }
*/
public byte[] signCodeASN1 (BigInteger R, BigInteger S)
throws SignatureException
{
final byte tag_Sequence = 48;
BigInt r = new BigInt(R.toByteArray());
BigInt s = new BigInt(S.toByteArray());
try
{
// comienza la codificacion DER
DerOutputStream deroutputstream = new DerOutputStream(100);
deroutputstream.putInteger(r);
deroutputstream.putInteger(s);
// acaba la codificacion DER
DerValue dervalue = new DerValue(tag_Sequence,
deroutputstream.toByteArray());
// reset();
byte[] sigASN1 = dervalue.toByteArray();
return sigASN1;
}
catch(IOException ex)
{
throw new SignatureException("Error al codificar firma");
}
}
/**
* Obtengo los parametros r, s a partir de una firma DSA codificada
DER
*/
public BigInteger[] signDecodeASN1 (byte[] sigASN1)
throws SignatureException
{
BigInteger R,S;
try
{
// comienzo a decodificar DER la firma sigASN1
DerInputStream derinputstream = new DerInputStream(sigASN1);
DerValue adervalue[] = derinputstream.getSequence(2);
R = adervalue[0].getInteger().toBigInteger();
S = adervalue[1].getInteger().toBigInteger();
// acaba la decodificacion DER
System.out.println ("DEBUG:DSA1.engineVerify
r="+R.toString(16));
System.out.println ("DEBUG:DSA1.engineVerify
s="+S.toString(16));
}
catch(IOException ex)
{
throw new SignatureException("Codificacion invalida para la
firma");
}
return new BigInteger[]{R,S};
}
// **************************************
Technical Details
Message-ID:
<36912518.D47D19C1@mat.upc.es>Path:
arc1-ca.pugleaf.net!unknown!not-for-mailReferences:
<36814F0F.9F64AAD7@mx3.redestb.es>Show Full Headers
Complete Article Headers
X-Google-Language: SPANISH,ASCII X-Google-Thread: 1116f3,2edf78b965966fc4 X-Google-Attributes: gid1116f3,public From: jmoya <jmoya@mat.upc.es> Subject: Re: PKCS Date: 1999/01/04 Message-ID: <36912518.D47D19C1@mat.upc.es> X-Deja-AN: 428746781 Content-Transfer-Encoding: 8bit References: <36814F0F.9F64AAD7@mx3.redestb.es> To: Javier Medina <javiermedina@mx3.redestb.es> X-Accept-Language: en Content-Type: text/plain; charset=iso-8859-1 Organization: Universitat Politecnica de Catalunya Mime-Version: 1.0 Newsgroups: es.comp.lenguajes.java