Java Tutorial/Security/Provider

Материал из Java эксперт
Перейти к: навигация, поиск

extends java.security.Provider

import java.security.AccessController;
import java.security.PrivilegedAction;
public final class ECCProvider extends java.security.Provider {
  private static final String INFO = "jexp"s provider";
  public ECCProvider() {
    super("jexp", 1.0, INFO);
    AccessController.doPrivileged(new PrivilegedAction() {
      public Object run() {
        put("KeyFactory.ECC", "com.jexpKeyFactory");
        put("KeyPairGenerator.ECC", "com.jexpKeyPairGenerator");
        return null;
      }
    });
  }
}





extends Provider

import java.security.Provider;
public class YourOwnProvider extends Provider {
  public YourOwnProvider() {
    super("YourOwn", 1.0, "YourOwn Security Provider v1.0");
    put("KeyGenerator.XOR", "yourPackageName.XORKeyGenerator");
    put("KeyPairGenerator.YourOwn", "yourPackageName.YourOwnKeyPairGenerator");
    put("KeyFactory.YourOwn", "yourPackageName.YourOwnKeyFactory");
    put("MessageDigest.YourOwn", "yourPackageName.YourOwnMessageDigest");
    put("Signature.YourOwnwithSHA", "yourPackageName.YourOwnSignature");
    put("Cipher.XOR", "yourPackageName.XORCipher");
    put("KeyManagerFactory.YourOwn", "yourPackageName.SSLKeyManagerFactory");
    put("Alg.Alias.MessageDigest.SHA-1", "SHA");
  }
  public static final synchronized void verifyForJCE() {
    throw new SecurityException("Can"t verify for JCE");
  }
}





Get a Provider

import java.security.Key;
import java.security.Provider;
import java.security.SecureRandom;
import java.security.Security;
import javax.crypto.Cipher;
public final class MainClass {
  String providerName = "Rot13Provider";
  String algorithmName = "ROT13";
  public static void main(String[] args) throws Exception {
    Provider p = Security.getProvider("Rot13Provider");
    System.out.println("Provider name: " + p.getName());
    System.out.println("Provider version: " + p.getVersion());
    System.out.println("Provider information: " + p.getInfo());
    Cipher cipher = Cipher.getInstance("ROT13", "Rot13Provider");
    System.out.println("Cipher: " + cipher.getAlgorithm());
    String testString = "This is a test!";
    cipher.init(Cipher.ENCRYPT_MODE, (Key) null, new SecureRandom());
    byte[] b1 = cipher.doFinal(testString.getBytes());
    cipher.init(Cipher.DECRYPT_MODE, (Key) null, new SecureRandom());
    byte[] b2 = cipher.doFinal(b1);
    System.out.println("Decrypted data as a String: " + new String(b2));
  }
}





Get cryptographic security providers

import java.security.Provider;
import java.security.Security;
import java.util.HashSet;
import java.util.Set;
public class Main {
  public static void main(String[] args) {
    Set<Object> result = new HashSet<Object>();
    Provider[] providers = Security.getProviders();
    for (Provider provider : providers) {
      Set<Object> keys = provider.keySet();
      for (Object key : keys) {
        String data = (String) key;
        data = data.split(" ")[0];
        if (data.startsWith("Alg.Alias")) {
          data = data.substring(10);
        }
        data = data.substring(0, data.indexOf("."));
        result.add(data);
      }
    }
    for (Object o : result) {
      System.out.println("Service Type = " + o);
    }
  }
}





Get Provider Info

import java.security.Provider;
import java.security.Security;
public class MainClass {
  public static void main(String[] args) {
    System.out.println("Providers installed on your system:");
    Provider[] providerList = Security.getProviders();
    for (int i = 0; i < providerList.length; i++) {
      System.out.println("[" + (i + 1) + "] - Provider name: " + providerList[i].getName());
      System.out.println("Provider version number: " + providerList[i].getVersion());
      System.out.println("Provider information:\n" + providerList[i].getInfo());
    }
  }
}
/*Providers installed on your system:
[1] - Provider name: SUN
Provider version number: 1.6
Provider information:
SUN (DSA key/parameter generation; DSA signing; SHA-1, MD5 digests; SecureRandom; X.509 certificates; JKS keystore; PKIX CertPathValidator; PKIX CertPathBuilder; LDAP, Collection CertStores, JavaPolicy Policy; JavaLoginConfig Configuration)
[2] - Provider name: SunRsaSign
Provider version number: 1.5
Provider information:
Sun RSA signature provider
[3] - Provider name: SunJSSE
Provider version number: 1.6
Provider information:
Sun JSSE provider(PKCS12, SunX509 key/trust factories, SSLv3, TLSv1)
[4] - Provider name: SunJCE
Provider version number: 1.6
Provider information:
SunJCE Provider (implements RSA, DES, Triple DES, AES, Blowfish, ARCFOUR, RC2, PBE, Diffie-Hellman, HMAC)
[5] - Provider name: SunJGSS
Provider version number: 1.0
Provider information:
Sun (Kerberos v5, SPNEGO)
[6] - Provider name: SunSASL
Provider version number: 1.5
Provider information:
Sun SASL provider(implements client mechanisms for: DIGEST-MD5, GSSAPI, EXTERNAL, PLAIN, CRAM-MD5; server mechanisms for: DIGEST-MD5, GSSAPI, CRAM-MD5)
[7] - Provider name: XMLDSig
Provider version number: 1.0
Provider information:
XMLDSig (DOM XMLSignatureFactory; DOM KeyInfoFactory)
[8] - Provider name: SunPCSC
Provider version number: 1.6
Provider information:
Sun PC/SC provider
[9] - Provider name: SunMSCAPI
Provider version number: 1.6
Provider information:
Sun"s Microsoft Crypto API provider
*/





Listing All Available Cryptographic Services

import java.security.Provider;
import java.security.Security;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
public class Main {
  public static void main(String[] argv) throws Exception {
    Set result = new HashSet();
    Provider[] providers = Security.getProviders();
    for (int i = 0; i < providers.length; i++) {
      Set keys = providers[i].keySet();
      for (Iterator it = keys.iterator(); it.hasNext();) {
        String key = (String) it.next();
        key = key.split(" ")[0];
        if (key.startsWith("Alg.Alias.")) {
          // Strip the alias
          key = key.substring(10);
        }
        int ix = key.indexOf(".");
        result.add(key.substring(0, ix));
      }
    }
    System.out.println(result);
  }
}
[KeyFactory, 
TransformService, 
CertPathBuilder, 
Cipher, 
SecureRandom, 
Signature, 
AlgorithmParameterGenerator, 
KeyPairGenerator, 
XMLSignatureFactory, 
CertificateFactory, 
MessageDigest, 
KeyInfoFactory, 
KeyAgreement, 
CertStore, 
Configuration, 
SSLContext, 
SaslServerFactory, 
AlgorithmParameters, 
TrustManagerFactory, 
GssApiMechanism, 
TerminalFactory, 
Mac, 
KeyGenerator, 
Policy, 
CertPathValidator, 
SaslClientFactory, 
SecretKeyFactory, 
KeyManagerFactory, 
KeyStore, 
Provider]





List the available capabilities for ciphers, key agreement, macs, message digests, signatures and other objects in the BC provider.

import java.security.Provider;
import java.security.Security;
import java.util.Iterator;
public class MainClass {
  public static void main(String[] args) {
    Provider provider = Security.getProvider("BC");
    Iterator it = provider.keySet().iterator();
    while (it.hasNext()) {
      String entry = (String) it.next();
      if (entry.startsWith("Alg.Alias.")) {
        entry = entry.substring("Alg.Alias.".length());
      }
      System.out.println(entry);
    }
  }
}





Return the available implementations for a service type

import java.security.Provider;
import java.security.Security;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
public class Main {
  public static void main(String[] argv) throws Exception {
    Set result = new HashSet();
    String serviceType = "KeyFactory";
    Provider[] providers = Security.getProviders();
    for (int i = 0; i < providers.length; i++) {
      Set keys = providers[i].keySet();
      for (Iterator it = keys.iterator(); it.hasNext();) {
        String key = (String) it.next();
        key = key.split(" ")[0];
        if (key.startsWith(serviceType + ".")) {
          result.add(key.substring(serviceType.length() + 1));
        } else if (key.startsWith("Alg.Alias." + serviceType + ".")) {
          result.add(key.substring(serviceType.length() + 11));
        }
      }
    }
    System.out.println(result);
  }
}
[1.2.840.113549.1.3.1, 
OID.1.2.840.113549.1.1, 
1.2.840.113549.1.1, 
OID.1.2.840.113549.1.3.1, 
1.3.14.3.2.12, 
DSA, DiffieHellman, RSA, DH, 1.2.840.10040.4.1]





Security.getProviders()

import java.security.Provider;
import java.security.Security;
import java.util.Enumeration;
public class MainClass {
  public static void main(String args[]) throws Exception{
      Provider p[] = Security.getProviders();
      for (int i = 0; i < p.length; i++) {
        System.out.println(p[i]);
        for (Enumeration e = p[i].keys(); e.hasMoreElements();)
          System.out.println("\t" + e.nextElement());
      }
  }
}