Java/Security/Algorithms
Версия от 18:01, 31 мая 2010; (обсуждение)
Содержание
Generating a Parameter Set for the Diffie-Hellman Key Agreement Algorithm
import java.security.AlgorithmParameterGenerator;
import java.security.AlgorithmParameters;
import javax.crypto.spec.DHParameterSpec;
public class Main {
public static void main(String[] argv) throws Exception {
AlgorithmParameterGenerator paramGen = AlgorithmParameterGenerator.getInstance("DH");
paramGen.init(1024);
AlgorithmParameters params = paramGen.generateParameters();
DHParameterSpec dhSpec = (DHParameterSpec) params.getParameterSpec(DHParameterSpec.class);
System.out.println("" + dhSpec.getP() + "," + dhSpec.getG() + "," + dhSpec.getL());
}
}
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);
}
}
}
JCE algorithms in Browser
import java.awt.Dimension;
import java.security.Provider;
import java.security.Security;
import java.util.HashSet;
import java.util.Set;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreeSelectionModel;
public class ListAlgorithmsBC extends JFrame {
private void getNodes(DefaultMutableTreeNode providerNode, Provider provider,
Set<Provider.Service> used, String title, String target) {
DefaultMutableTreeNode node = new DefaultMutableTreeNode(title);
for (Provider.Service service : provider.getServices()) {
if (!used.contains(service) && target.equalsIgnoreCase(service.getType())) {
used.add(service);
DefaultMutableTreeNode algNode = new DefaultMutableTreeNode(service.getAlgorithm());
node.add(algNode);
algNode.add(new DefaultMutableTreeNode("class : " + service.getClassName()));
}
}
if (node.getChildCount() != 0) {
providerNode.add(node);
}
}
private ListAlgorithmsBC() {
super("JCE Algorithms");
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
DefaultMutableTreeNode root = new DefaultMutableTreeNode("Providers");
DefaultTreeModel treeModel = new DefaultTreeModel(root);
for (Provider provider : java.security.Security.getProviders()) {
DefaultMutableTreeNode providerNode = new DefaultMutableTreeNode(provider);
root.add(providerNode);
Set<Provider.Service> used = new HashSet<Provider.Service>();
getNodes(providerNode, provider, used, "Cipher", "cipher");
getNodes(providerNode, provider, used, "Key Agreement", "keyagreement");
getNodes(providerNode, provider, used, "Key Generator", "keygenerator");
getNodes(providerNode, provider, used, "Key Pair Generator", "keypairgenerator");
getNodes(providerNode, provider, used, "Key Factory", "keyfactory");
getNodes(providerNode, provider, used, "Secret Key Factory", "secretkeyfactory");
getNodes(providerNode, provider, used, "Mac", "mac");
getNodes(providerNode, provider, used, "Message Digest", "messagedigest");
getNodes(providerNode, provider, used, "Signature", "signature");
getNodes(providerNode, provider, used, "Algorithm Paramater", "algorithmparameters");
getNodes(providerNode, provider, used, "Algorithm Paramater Generator",
"algorithmparametergenerator");
getNodes(providerNode, provider, used, "Key Store", "keystore");
getNodes(providerNode, provider, used, "Secure Random", "securerandom");
getNodes(providerNode, provider, used, "Certificate Factory", "certificatefactory");
getNodes(providerNode, provider, used, "Certificate Store", "certstore");
getNodes(providerNode, provider, used, "Key Manager Factory", "KeyManagerFactory");
getNodes(providerNode, provider, used, "Trust Manager Factory", "TrustManagerFactory");
getNodes(providerNode, provider, used, "SSL Context", "SSLContext");
getNodes(providerNode, provider, used, "Sasl Server Factory", "SaslServerFactory");
getNodes(providerNode, provider, used, "Sasl Client Factory", "SaslClientFactory");
{
DefaultMutableTreeNode node = new DefaultMutableTreeNode("Other");
for (Provider.Service service : provider.getServices()) {
if (!used.contains(service)) {
DefaultMutableTreeNode serviceNode = new DefaultMutableTreeNode(service.getType()
+ " : " + service.getAlgorithm());
node.add(serviceNode);
serviceNode.add(new DefaultMutableTreeNode("class : " + service.getClassName()));
}
}
if (node.getChildCount() != 0)
providerNode.add(node);
}
}
JTree tree = new JTree(treeModel);
tree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
tree.setEditable(false);
JScrollPane pane = new JScrollPane(tree);
pane.setPreferredSize(new Dimension(200, 200));
getContentPane().add(pane);
pack();
}
public static void main(String[] args) {
Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
new ListAlgorithmsBC().setVisible(true);
}
}
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]
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]
What is in bouncycastle (bouncy castle)
/*
KeyGenerator:
HMAC-MD2
GOST
HMACRIPEMD160
ARC4
CAST5
2.16.840.1.101.3.4.1.44
HMAC-SHA384
2.16.840.1.101.3.4.2
HMAC-MD4
HMAC-SHA1
HMAC-RIPEMD128
HMAC-SHA512
2.16.840.1.101.3.4.1.5
DESEDEWRAP
TWOFISH
HMACMD4
2.16.840.1.101.3.4.1.24
2.16.840.1.101.3.4.1.42
RIJNDAEL
IDEA
2.16.840.1.101.3.4.42
RC4
1.2.840.113549.2.10
RC5
HMAC-MD5
2.16.840.1.101.3.4.22
HMAC-SHA224
1.2.840.113533.7.66.10
BLOWFISH
HMACMD2
HMACRIPEMD128
RC2
2.16.840.1.101.3.4.1.23
GOST-28147
1.2.840.113549.2.9
HMACSHA512
DESEDE
CAMELLIA
SERPENT
RC5-64
RC5-32
HMAC-SHA256
HMACSHA384
HMAC-RIPEMD160
1.2.840.113549.3.7
AESWRAP
HMACTIGER
2.16.840.1.101.3.4.1.22
RC6
HMACMD5
1.2.840.113549.2.7
HMACSHA256
1.3.14.3.2.7
2.16.840.1.101.3.4.1.21
2.16.840.1.101.3.4.1.2
1.2.643.2.2.21
1.2.840.113549.2.8
1.2.840.113549.2.11
1.2.840.113549.3.4
2.16.840.1.101.3.4.1.45
2.16.840.1.101.3.4.1.41
2.16.840.1.101.3.4.1.1
2.16.840.1.101.3.4.1.3
HMACSHA224
2.16.840.1.101.3.4.1.43
2.16.840.1.101.3.4.1.4
1.3.6.1.4.1.188.7.1.1.2
2.16.840.1.101.3.4.1.25
CAST6
HMACSHA1
1.2.840.113549.3.2
SKIPJACK
AES
DES
GOST28147
KeyFactory:
EC
ECDH
1.2.840.113549.1.1
OID.1.2.840.113549.1.1
1.2.643.2.2.19
DH
ECDSA
1.3.14.3.2.12
1.2.840.113549.1.1.1
GOST-3410-94
RSA
ECGOST-3410
1.2.840.10045.2.1
DSA ImplementedIn
GOST3410
DSA
GOST-3410
ELGAMAL
1.2.840.10040.4.1
1.2.643.2.2.20
ECDHC
GOST-3410-2001
ECGOST3410
ElGamal
KeyPairGenerator:
EC
ECDH
1.2.840.113549.1.1
OID.1.2.840.113549.1.1
DSA KeySize
DH
1.3.14.3.2.12
ECDSA
OID.1.2.840.10040.4.1
1.2.840.113549.1.1.1
GOST-3410-94
ECGOST-3410
RSA
GOST3410
ECIES
DSA ImplementedIn
GOST-3410
DSA
ELGAMAL
1.2.840.10040.4.1
ECDHC
GOST-3410-2001
ECGOST3410
Ciphers:
ELGAMAL/NONE/NOPADDING
RSA//NOPADDING
PBEWITHSHA1AND192BITAES-CBC-BC
OLDPBEWITHSHAAND3-KEYTRIPLEDES-CBC
1.2.840.113549.1.1.7
CAST5
ELGAMAL/PKCS1
PBEWITHSHA1AND128BITRC2-CBC
1.2.840.113549.1.12.1.3
ECIES
RSA//RAW
PBEWITHSHAAND40BITRC2-CBC
PBEWITHSHAAND3-KEYTRIPLEDES-CBC
2.16.840.1.101.3.4.1.5
1.2.840.113549.1.12.1.6
DESEDEWRAP
PBEWITHSHA-1AND192BITAES-CBC-BC
2.16.840.1.101.3.4.1.24
2.16.840.1.101.3.4.1.42
PBEWITHSHA256AND256BITAES-CBC-BC
RIJNDAEL
IDEA
2.16.840.1.101.3.4.42
RC4
PBEWITHSHA1AND128BITAES-CBC-BC
PBEWITHSHA-1AND256BITAES-CBC-BC
RC5
1.2.840.113549.1.12.1.2
RC2
1.2.840.113549.1.9.16.3.6
PBEWITHSHA1ANDDESEDE
RSA/OAEP
SERPENT
RC5-64
RC5-32
1.2.840.113549.3.7
AESWRAP
RSA/PKCS1
2.16.840.1.101.3.4.1.22
RC6
PBEWITHMD5ANDRC2
2.16.840.1.101.3.4.1.2
2.16.840.1.101.3.4.1.21
ARCFOUR
1.2.643.2.2.21
2.5.8.1.1
IES
1.2.840.113549.1.12.1.5
2.16.840.1.101.3.4.1.45
2.16.840.1.101.3.4.1.41
2.16.840.1.101.3.4.1.1
2.16.840.1.101.3.4.1.3
PBEWITHSHA1ANDRC2
RSA//OAEPPADDING
2.16.840.1.101.3.4.1.43
2.16.840.1.101.3.4.1.4
PBEWITHSHA1AND40BITRC2-CBC
PBEWITHSHAAND256BITAES-CBC-BC
PBEWITHSHA256AND192BITAES-CBC-BC
SKIPJACK
DES
PBEWITHSHAAND40BITRC4
BROKENPBEWITHMD5ANDDES
PBEWITHMD5AND256BITAES-CBC-OPENSSL
PBEWITHSHA1AND2-KEYTRIPLEDES-CBC
RSA/1
PBEWITHMD5AND192BITAES-CBC-OPENSSL
GOST
ARC4
PBEWITHSHAAND128BITRC4
1.2.840.113549.1.12.1.1
RSA/2
2.16.840.1.101.3.4.1.44
RSA//ISO9796-1PADDING
PBEWITHSHAAND2-KEYTRIPLEDES-CBC
2.16.840.1.101.3.4.2
RC2WRAP
PBEWITHSHA-256AND256BITAES-CBC-BC
PBEWITHSHA1ANDDES
PBEWITHSHAANDTWOFISH-CBC
TWOFISH
1.2.840.113549.1.9.16.3.7
ELGAMAL/NONE/PKCS1PADDING
1.2.840.113549.1.12.1.4
PBEWITHSHAAND128BITRC2-CBC
PBEWITHSHA1AND128BITRC4
PBEWITHSHAAND192BITAES-CBC-BC
2.16.840.1.101.3.4.22
PBEWithSHAAnd3KeyTripleDES
BLOWFISH
1.2.840.113533.7.66.10
2.16.840.1.101.3.4.1.23
GOST-28147
ELGAMAL/ECB/PKCS1PADDING
DESEDE
PBEWITHSHA-256AND128BITAES-CBC-BC
RSA/ISO9796-1
RSA//PKCS1PADDING
CAMELLIA
PBEWITHSHA-1AND128BITAES-CBC-BC
BROKENPBEWITHSHA1ANDDES
BROKENPBEWITHSHAAND3-KEYTRIPLEDES-CBC
PBEWITHSHA1AND3-KEYTRIPLEDES-CBC
RSA
ELGAMAL
PBEWITHSHA256AND128BITAES-CBC-BC
RSA/RAW
1.3.14.3.2.7
PBEWITHSHA-256AND192BITAES-CBC-BC
PBEWITHSHA1AND40BITRC4
1.2.840.113549.3.4
PBEWITHMD5AND128BITAES-CBC-OPENSSL
BROKENPBEWITHSHAAND2-KEYTRIPLEDES-CBC
PBEWITHSHAAND128BITAES-CBC-BC
1.2.840.113549.1.1.1
OLDPBEWITHSHAANDTWOFISH-CBC
2.16.840.1.101.3.4.1.25
1.3.6.1.4.1.188.7.1.1.2
CAST6
PBEWITHSHA1AND256BITAES-CBC-BC
1.2.840.113549.3.2
PBEWITHSHAANDIDEA-CBC
AES
PBEWITHMD5ANDDES
GOST28147
KeyAgreeents:
ECDH
ECDHC
DH
Macs:
RC2MAC
HMAC-MD2
IDEAMAC/CFB8
HMAC/SHA512
HMACRIPEMD160
RC5MAC
HMAC-SHA384
HMAC-MD4
HMAC/SHA1
DESEDEMAC64
HMAC-SHA1
HMAC-RIPEMD128
HMAC-SHA512
HMAC/RIPEMD128
GOST28147MAC
PBEWITHHMACRIPEMD160
PBEWITHHMACSHA1
RC2MAC/CFB8
DESEDE64
HMACMD4
PBEWITHHMACSHA
SKIPJACKMAC
IDEA
SKIPJACK/CFB8
HMAC/MD2
HMAC/MD5
RC5/CFB8
RC2/CFB8
OLDHMACSHA512
1.2.840.113549.2.10
HMAC/SHA224
DESWITHISO9797
RC5
DES/CFB8
HMAC-MD5
HMAC-SHA224
HMACMD2
HMACRIPEMD128
ISO9797ALG3MAC
RC2
DESEDE/CFB8
1.2.840.113549.2.9
HMACSHA512
DESEDE
HMAC-SHA256
HMACSHA384
HMAC/Tiger
HMAC-RIPEMD160
IDEA/CFB8
DESEDEMAC/CFB8
1.3.14.3.2.26
HMAC/MD4
1.2.840.113549.2.7
HMACMD5
IDEAMAC
HMACSHA256
HMACTiger
RC5MAC/CFB8
HMAC/SHA384
1.2.840.113549.2.8
1.2.840.113549.2.11
DESMAC/CFB8
HMACSHA224
DESMAC
ISO9797ALG3
HMAC/SHA256
DESEDEMAC
OLDHMACSHA384
SKIPJACKMAC/CFB8
HMAC/RIPEMD160
HMAC-Tiger
HMACSHA1
SKIPJACK
DESISO9797MAC
DES
MessageDigests:
1.3.36.3.2.2
RIPEMD320
SHA224
1.2.840.113549.2.2
SHA384
SHA ImplementedIn
GOST
1.3.36.3.2.1
MD5
1.2.840.113549.2.4
SHA256
SHA-512
1.3.36.3.2.3
RIPEMD128
MD2
1.3.14.3.2.26
RIPEMD256
SHA-256
GOST3411
MD5 ImplementedIn
WHIRLPOOL
1.2.643.2.2.9
SHA1
SHA-224
MD4
2.16.840.1.101.3.4.2.3
2.16.840.1.101.3.4.2.1
1.2.840.113549.2.5
RIPEMD160
SHA-1
2.16.840.1.101.3.4.2.4
SHA
Tiger
SHA512
GOST-3411
SHA-384
2.16.840.1.101.3.4.2.2
Signatures:
SHA384withRSA
SHA1withRSAEncryption
NONEwithDSA SupportedKeyClasses
RIPEMD160withRSA
GOST-3410
SHA224withRSAandMGF1
SHA256WITHECDSA
SHA224withRSA
SHA512WITHECDSA
SHA1WithRSAEncryption
MD4WithRSAEncryption
1.2.840.113549.1.1.4
MD2WITHRSAENCRYPTION
ECDSAwithSHA1
MD5andSHA1withRSA
GOST3411WithECGOST3410
SHA1withRSAandMGF1
SHA1withRSA/ISO9796-2
SHA256withRSA
1.2.643.2.2.3
SHA1WITHRSA
SHA256withRSAandMGF1
GOST3411WITHECGOST3410
RawDSA
GOST-3410-94
RIPEMD128WithRSAEncryption
SHA384WITHRSAENCRYPTION
1.3.14.3.2.26with1.2.840.113549.1.1.1
SHA-1/DSA
MD2withRSAEncryption
RIPEMD160withRSAEncryption
RIPEMD160WITHRSAENCRYPTION
SHA1WithRSA
SHA1WithECDSA
1.3.14.3.2.29
SHA224withRSAEncryption
SHA/DSA
SHA1withDSA KeySize
SHA512WithRSA
SHA1WITHDSA
SHA512WithRSAEncryption
SHA256WITHRSAENCRYPTION
GOST3411withECGOST3410
SHA512withRSA/PSS
RIPEMD160WithRSAEncryption
MD5WITHRSAENCRYPTION
RIPEMD160WithRSA/ISO9796-2
SHA384withRSA SupportedKeyClasses
GOST3410
SHA256WITHECNR
MD5withRSA/ISO9796-2
SHA1withRSA
SHA256WithRSAEncryption
SHA1withRSA/PSS
SHA384withRSAEncryption
1.3.14.3.2.26with1.2.840.113549.1.1.5
ECDSAWITHSHA1
RMD160WITHRSA
NONEwithDSA
1.2.840.113549.1.1.11
RIPEMD256WithRSAEncryption
SHA256withRSAEncryption
1.2.840.10040.4.3
SHA512withRSAEncryption
1.2.840.113549.1.1.3
SHA384WithRSAEncryption
SHA224withRSA/PSS
1.2.840.113549.1.1.12
MD4withRSA
MD5WITHRSA
RAWDSA
1.2.643.2.2.4
RMD160/RSA
1.3.14.3.2.13
ECGOST-3410
DSAWithSHA1
1.2.840.113549.1.1.13
OID.1.3.14.3.2.29
RIPEMD160withRSA/ISO9796-2
1.2.840.10045.4.1
SHA256withRSA SupportedKeyClasses
RIPEMD256WithRSA
1.2.840.113549.1.1.5
SHA384withRSAandMGF1
SHA1withRSA SupportedKeyClasses
SHA1/RSA
GOST3411WITHGOST3410
SHA224WithRSA
SHA512withRSAandMGF1
SHA1WithDSA
SHA1WITHECNR
OID.1.2.840.113549.1.1.5
SHA512withRSA
ECDSA
SHA512WITHRSAENCRYPTION
OID.1.2.840.113549.1.1.11
MD4withRSAEncryption
MD2WithRSA
RIPEMD160WithRSA
SHA1WithRSA/ISO9796-2
MD5withRSA SupportedKeyClasses
MD4WithRSA
DSAwithSHA1
RIPEMD160WITHRSA
RSASSA-PSS
GOST3411WithGOST3410
OID.1.2.840.113549.1.1.13
MD5WithRSAEncryption
1.3.36.3.3.1.4
1.2.840.113549.1.1.14
MD2withRSA SupportedKeyClasses
1.2.840.113549.1.1.2
MD2withRSA
SHA384WITHECNR
SHAwithDSA
MD4/RSA
RIPEMD256withRSA
DSA
SHA-1/RSA
1.2.840.113549.2.5with1.2.840.113549.1.1.1
SHA384WITHECDSA
OID.1.2.840.113549.1.1.12
OID.1.2.840.113549.1.1.2
1.3.36.3.3.1.3
1.2.840.113549.1.1.10
OID.1.2.840.10040.4.3
OID.1.2.840.113549.1.1.4
SHA512withRSA SupportedKeyClasses
MD5WithRSA/ISO9796-2
GOST3411withGOST3410
SHA224WITHECDSA
MD5withRSAEncryption
MD5withRSA
DSS
SHA224WithRSAEncryption
ECDSAWithSHA1
1.3.36.3.3.1.2
RIPEMD128withRSA
SHA384withRSA/PSS
SHA1WITHECDSA
1.3.14.3.2.26with1.2.840.10040.4.3
SHA1WITHRSAENCRYPTION
MD2/RSA
RIPEMD-160/RSA
RMD160withRSA
SHA512WITHECNR
1.3.14.3.2.27
MD5WithRSA
MD2WithRSAEncryption
MD5/RSA
DSAWITHSHA1
SHA1withDSA
SHA384WithRSA
1.3.14.3.2.26with1.2.840.10040.4.1
SHA256withRSA/PSS
SHA1/DSA
NONEWITHDSA
SHA1withDSA ImplementedIn
SHA1withDSA SupportedKeyClasses
SHA256WithRSA
ECGOST3410
RIPEMD128WithRSA
GOST-3410-2001
SHA224WITHECNR
SHA1withECDSA
*/
import java.security.Provider;
import java.security.Security;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
public class ListAlgorithms {
public static void printSet(String setName, Set algorithms) {
System.out.println(setName + ":");
if (algorithms.isEmpty()) {
System.out.println(" None available.");
} else {
Iterator it = algorithms.iterator();
while (it.hasNext()) {
String name = (String) it.next();
System.out.println(" " + name);
}
}
}
public static void main(String[] args) {
Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
Provider[] providers = Security.getProviders();
Set<String> ciphers = new HashSet<String>();
Set<String> keyAgreements = new HashSet<String>();
Set<String> macs = new HashSet<String>();
Set<String> messageDigests = new HashSet<String>();
Set<String> signatures = new HashSet<String>();
Set<String> keyFactory = new HashSet<String>();
Set<String> keyPairGenerator = new HashSet<String>();
Set<String> keyGenerator = new HashSet<String>();
for (int i = 0; i != providers.length; i++) {
Iterator it = providers[i].keySet().iterator();
while (it.hasNext()) {
String entry = (String) it.next();
if (entry.startsWith("Alg.Alias.")) {
entry = entry.substring("Alg.Alias.".length());
}
if (entry.startsWith("Cipher.")) {
ciphers.add(entry.substring("Cipher.".length()));
} else if (entry.startsWith("KeyAgreement.")) {
keyAgreements.add(entry.substring("KeyAgreement.".length()));
} else if (entry.startsWith("Mac.")) {
macs.add(entry.substring("Mac.".length()));
} else if (entry.startsWith("MessageDigest.")) {
messageDigests.add(entry.substring("MessageDigest.".length()));
} else if (entry.startsWith("Signature.")) {
signatures.add(entry.substring("Signature.".length()));
} else if (entry.startsWith("KeyPairGenerator.")) {
keyPairGenerator.add(entry.substring("KeyPairGenerator.".length()));
} else if (entry.startsWith("KeyFactory.")) {
keyFactory.add(entry.substring("KeyFactory.".length()));
} else if (entry.startsWith("KeyGenerator.")) {
keyGenerator.add(entry.substring("KeyGenerator.".length()));
} else {
System.out.println(entry);
}
}
}
printSet("KeyGenerator", keyGenerator);
printSet("KeyFactory", keyFactory);
printSet("KeyPairGenerator", keyPairGenerator);
printSet("Ciphers", ciphers);
printSet("KeyAgreeents", keyAgreements);
printSet("Macs", macs);
printSet("MessageDigests", messageDigests);
printSet("Signatures", signatures);
}
}