⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jdkpkcs12keystore.java

📁 kmlnjlkj nlkjlkjkljl okopokipoipo oipipipo i
💻 JAVA
📖 第 1 页 / 共 4 页
字号:
package org.bouncycastle.jce.provider;import org.bouncycastle.asn1.ASN1EncodableVector;import org.bouncycastle.asn1.ASN1InputStream;import org.bouncycastle.asn1.ASN1Object;import org.bouncycastle.asn1.ASN1OctetString;import org.bouncycastle.asn1.ASN1Sequence;import org.bouncycastle.asn1.ASN1Set;import org.bouncycastle.asn1.BERConstructedOctetString;import org.bouncycastle.asn1.BEROutputStream;import org.bouncycastle.asn1.DERBMPString;import org.bouncycastle.asn1.DERNull;import org.bouncycastle.asn1.DERObject;import org.bouncycastle.asn1.DERObjectIdentifier;import org.bouncycastle.asn1.DEROctetString;import org.bouncycastle.asn1.DERSequence;import org.bouncycastle.asn1.DERSet;import org.bouncycastle.asn1.pkcs.AuthenticatedSafe;import org.bouncycastle.asn1.pkcs.CertBag;import org.bouncycastle.asn1.pkcs.ContentInfo;import org.bouncycastle.asn1.pkcs.EncryptedData;import org.bouncycastle.asn1.pkcs.MacData;import org.bouncycastle.asn1.pkcs.PKCS12PBEParams;import org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers;import org.bouncycastle.asn1.pkcs.Pfx;import org.bouncycastle.asn1.pkcs.SafeBag;import org.bouncycastle.asn1.util.ASN1Dump;import org.bouncycastle.asn1.x509.AlgorithmIdentifier;import org.bouncycastle.asn1.x509.AuthorityKeyIdentifier;import org.bouncycastle.asn1.x509.DigestInfo;import org.bouncycastle.asn1.x509.SubjectKeyIdentifier;import org.bouncycastle.asn1.x509.SubjectPublicKeyInfo;import org.bouncycastle.asn1.x509.X509Extensions;import org.bouncycastle.asn1.x509.X509ObjectIdentifiers;import org.bouncycastle.jce.interfaces.BCKeyStore;import org.bouncycastle.jce.interfaces.PKCS12BagAttributeCarrier;import org.bouncycastle.util.Arrays;import org.bouncycastle.util.Strings;import org.bouncycastle.util.encoders.Hex;import java.io.BufferedInputStream;import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.security.Key;import java.security.KeyStoreException;import java.security.KeyStoreSpi;import java.security.NoSuchAlgorithmException;import java.security.Principal;import java.security.PrivateKey;import java.security.PublicKey;import java.security.SecureRandom;import java.security.UnrecoverableKeyException;import java.security.Provider;import java.security.Security;import java.security.cert.Certificate;import java.security.cert.CertificateEncodingException;import java.security.cert.CertificateFactory;import java.security.cert.X509Certificate;import java.util.Date;import java.util.Enumeration;import java.util.Hashtable;import java.util.Vector;import javax.crypto.Cipher;import javax.crypto.Mac;import javax.crypto.SecretKey;import javax.crypto.SecretKeyFactory;import javax.crypto.spec.PBEKeySpec;import javax.crypto.spec.PBEParameterSpec;public class JDKPKCS12KeyStore    extends KeyStoreSpi    implements PKCSObjectIdentifiers, X509ObjectIdentifiers, BCKeyStore{    private static final int                SALT_SIZE = 20;    private static final int                MIN_ITERATIONS = 1024;    private static final Provider           bcProvider = new BouncyCastleProvider();    private IgnoresCaseHashtable            keys = new IgnoresCaseHashtable();    private Hashtable                       localIds = new Hashtable();    private IgnoresCaseHashtable            certs = new IgnoresCaseHashtable();    private Hashtable                       chainCerts = new Hashtable();    private Hashtable                       keyCerts = new Hashtable();    //    // generic object types    //    static final int NULL           = 0;    static final int CERTIFICATE    = 1;    static final int KEY            = 2;    static final int SECRET         = 3;    static final int SEALED         = 4;    //    // key types    //    static final int    KEY_PRIVATE = 0;    static final int    KEY_PUBLIC  = 1;    static final int    KEY_SECRET  = 2;    protected SecureRandom      random = new SecureRandom();    // use of final causes problems with JDK 1.2 compiler    private CertificateFactory  certFact;    private DERObjectIdentifier keyAlgorithm;    private DERObjectIdentifier certAlgorithm;    private class CertId    {        byte[]  id;        CertId(            PublicKey  key)        {            this.id = createSubjectKeyId(key).getKeyIdentifier();        }        CertId(            byte[]  id)        {            this.id = id;        }        public int hashCode()        {            return Arrays.hashCode(id);        }        public boolean equals(            Object  o)        {            if (o == this)            {                return true;            }            if (!(o instanceof CertId))            {                return false;            }            CertId  cId = (CertId)o;            return Arrays.areEqual(id, cId.id);        }    }    public JDKPKCS12KeyStore(        Provider provider,        DERObjectIdentifier keyAlgorithm,        DERObjectIdentifier certAlgorithm)    {        this.keyAlgorithm = keyAlgorithm;        this.certAlgorithm = certAlgorithm;        try        {            if (provider != null)            {                certFact = CertificateFactory.getInstance("X.509", provider);            }            else            {                certFact = CertificateFactory.getInstance("X.509");            }        }        catch (Exception e)        {            throw new IllegalArgumentException("can't create cert factory - " + e.toString());        }    }    private SubjectKeyIdentifier createSubjectKeyId(        PublicKey   pubKey)    {        try        {            SubjectPublicKeyInfo info = new SubjectPublicKeyInfo(                (ASN1Sequence) ASN1Object.fromByteArray(pubKey.getEncoded()));            return new SubjectKeyIdentifier(info);        }        catch (Exception e)        {            throw new RuntimeException("error creating key");        }    }    public void setRandom(        SecureRandom    rand)    {        this.random = rand;    }    public Enumeration engineAliases()     {        Hashtable  tab = new Hashtable();        Enumeration e = certs.keys();        while (e.hasMoreElements())        {            tab.put(e.nextElement(), "cert");        }        e = keys.keys();        while (e.hasMoreElements())        {            String  a = (String)e.nextElement();            if (tab.get(a) == null)            {                tab.put(a, "key");            }        }        return tab.keys();    }    public boolean engineContainsAlias(        String  alias)     {        return (certs.get(alias) != null || keys.get(alias) != null);    }    /**     * this is not quite complete - we should follow up on the chain, a bit     * tricky if a certificate appears in more than one chain...     */    public void engineDeleteEntry(        String  alias)         throws KeyStoreException    {        Key k = (Key)keys.remove(alias);        Certificate c = (Certificate)certs.remove(alias);        if (c != null)        {            chainCerts.remove(new CertId(c.getPublicKey()));        }        if (k != null)        {            String  id = (String)localIds.remove(alias);            if (id != null)            {                c = (Certificate)keyCerts.remove(id);            }            if (c != null)            {                chainCerts.remove(new CertId(c.getPublicKey()));            }        }        if (c == null && k == null)        {            throw new KeyStoreException("no such entry as " + alias);        }    }    /**     * simply return the cert for the private key     */    public Certificate engineGetCertificate(        String alias)     {        if (alias == null)        {            throw new IllegalArgumentException("null alias passed to getCertificate.");        }                Certificate c = (Certificate)certs.get(alias);        //        // look up the key table - and try the local key id        //        if (c == null)        {            String  id = (String)localIds.get(alias);            if (id != null)            {                c = (Certificate)keyCerts.get(id);            }            else            {                c = (Certificate)keyCerts.get(alias);            }        }        return c;    }    public String engineGetCertificateAlias(        Certificate cert)     {        Enumeration c = certs.elements();        Enumeration k = certs.keys();        while (c.hasMoreElements())        {            Certificate tc = (Certificate)c.nextElement();            String      ta = (String)k.nextElement();            if (tc.equals(cert))            {                return ta;            }        }        c = keyCerts.elements();        k = keyCerts.keys();        while (c.hasMoreElements())        {            Certificate tc = (Certificate)c.nextElement();            String      ta = (String)k.nextElement();            if (tc.equals(cert))            {                return ta;            }        }                return null;    }        public Certificate[] engineGetCertificateChain(        String alias)     {        if (alias == null)        {            throw new IllegalArgumentException("null alias passed to getCertificateChain.");        }                if (!engineIsKeyEntry(alias))        {            return null;        }                Certificate c = engineGetCertificate(alias);        if (c != null)        {            Vector  cs = new Vector();            while (c != null)            {                X509Certificate     x509c = (X509Certificate)c;                Certificate         nextC = null;                byte[]  bytes = x509c.getExtensionValue(X509Extensions.AuthorityKeyIdentifier.getId());                if (bytes != null)                {                    try                    {                        ASN1InputStream         aIn = new ASN1InputStream(bytes);                        byte[] authBytes = ((ASN1OctetString)aIn.readObject()).getOctets();                        aIn = new ASN1InputStream(authBytes);                        AuthorityKeyIdentifier id = new AuthorityKeyIdentifier((ASN1Sequence)aIn.readObject());                        if (id.getKeyIdentifier() != null)                        {                            nextC = (Certificate)chainCerts.get(new CertId(id.getKeyIdentifier()));                        }                                            }                    catch (IOException e)                    {                        throw new RuntimeException(e.toString());                    }                }                if (nextC == null)                {

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -