目录

  • 概述
    • 1 JCA
    • 2 JCE
    • 3 加密服务提供程序(CSP)
      • 3.1 JDK可用的Provider列表
        • 3.1.1 JDK Provider算法列表
      • 3.2 添加Bouncy Castle Provider
        • 3.2.1 动态添加
        • 3.2.2 静态添加
        • 3.2.3 Bouncy Castle Provider算法列表
    • 4 Engine类和算法
      • 4.1 引擎类的使用示例-AES加密解密
      • 4.2 引擎类支持的算法列表

概述

Java安全体系结构总共分为4个部分:

  1. JCA( Java Cryptography Architecture, Java加密体系结构):JCA提供基本的加密框架, 如证书、 数字签名、消息摘要和密钥对产生器。
  2. JCE( Java Cryptography Extension, Java加密扩展包):JCE在JCA的基础上作了扩展, 提供了各种加密算法、 消息摘要算法和密钥管理等功能。JCE的实现主要在javax.crypto包( 及其子包) 中
  3. JSSE( Java Secure Sockets Extension, Java安全套接字扩展包):JSSE提供了基于SSL( Secure Sockets Layer,安全套接字层) 的加密功能。 在网络的传输过程中, 信息会经过多个主机(很有可能其中一台就被窃听) , 最终传送给接收者, 这是不安全的。这种确保网络通信安全的服务就是由JSSE来提供的。
  4. JAAS( Java Authentication and Authentication Service, Java鉴别与安全服务):JAAS提供了在Java平台上进行用户身份鉴别的功能。

1 JCA

JCA和JCE是Java平台提供的用于安全和加密服务的两组API。它们并不执行任何算法,它们只是连接应用和实际算法实现程序的一组接口。

官方链接: https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html

JCA( Java Cryptography Architecture, Java加密体系结构)围绕以下原则设计:

  • 实现独立性:应用程序不需要实现安全算法。相反,他们可以从Java平台请求安全服务。安全服务在提供程序中实现,它们通过标准接口插入Java平台。应用程序可能依赖多个独立提供程序来实现安全功能。

  • 实现互操作性:提供程序可跨应用程序进行互操作。具体而言,应用程序未绑定到特定提供程序,并且提供程序未绑定到特定应用程序。

  • 算法可扩展性:Java平台包括许多内置提供程序,这些提供程序实现了当今广泛使用的基本安全服务集。但是,某些应用程序可能依赖于尚未实施的新兴标准或专有服务。Java平台支持安装实现此类服务的自定义提供程序。

JCA相关代码位于JDK的rt.jar中的java.security包及其子包中。

2 JCE

软件开发商可以根据JCE接口( 又称安全提供者接口) 将各种算法实现后,打包成一个Provider( 安全提供者) , 动态地加载到Java运行环境中。

java.security.Provider是所有安全提供程序的基类。

根据美国出口限制规定, JCA可出口, 但JCE对部分国家是限制出口的。 因此, 要实现一个完整的安全结构,就需要一个或多个第三方厂商提供的JCE产品, 称为安全提供者。 BouncyCastle JCE就是其中的一个安全提供者。

JCE相关代码位于JDK的jce.jar中的javax.crypto包及其子包中。

3 加密服务提供程序(CSP)

加密服务提供程序Cryptographic Service Provider (CSP),是指实现一个或多个密码服务(如数字签名算法,消息摘要算法和密钥转换服务)的包或一组包。java.security.Provider是所有安全提供程序的基类。 每个CSP都包含这个类的一个实例,它包含了提供者的名字,并列出了它实现的所有安全服务/算法。 当需要特定算法的实例时,JCA框架会咨询提供者的数据库,如果找到合适的匹配项,则创建该实例。

Provider包含一个包(或一组包),为声明的加密算法提供具体的实现。 每个JDK安装都默认安装并配置了一个或多个提供程序。 其他提供者可以静态或动态添加(参见Provider和Security类)。 客户端可以配置其运行时环境来指定提供程序的首选顺序。 首选顺序是在没有请求特定提供者时提供者搜索请求的服务的顺序。

要使用JCA,应用程序只需要请求特定类型的对象(如MessageDigest)和特定的算法或服务(如“SHA-256”算法),并从一个已安装的提供者获取实现。 或者,程序可以请求来自特定提供者的对象。 每个提供者都有一个名字来引用它。

应用程序需要一个“AES”算法的javax.crypto.Cipher实例,并不关心使用哪个提供者。应用程序调用Cipher引擎类的getInstance()工厂方法,然后请求JCA框架查找支持“AES”的第一个提供程序实例。该框架会咨询每个已安装的提供者,并获取提供者类的提供者实例。

3.1 JDK可用的Provider列表

每个JDK安装都默认安装并配置了一个或多个provider包。
JDK中的加密库出于历史原因,由几个不同的提供者实现,可以运行如下程序查看JDK可用的Provider列表:

public static void printAllSecurityProviders() {for (Provider provider : Security.getProviders()){System.out.println("Provider: " + provider.getName() + " (ver " + provider.getVersion() + ")");}}

在JDK8中输出如下:

Provider: SUN (ver 1.8)
Provider: SunRsaSign (ver 1.8)
Provider: SunEC (ver 1.8)
Provider: SunJSSE (ver 1.8)
Provider: SunJCE (ver 1.8)
Provider: SunJGSS (ver 1.8)
Provider: SunSASL (ver 1.8)
Provider: XMLDSig (ver 1.8)
Provider: SunPCSC (ver 1.8)
Provider: SunMSCAPI (ver 1.8)
Provider: BC (ver 1.72)

3.1.1 JDK Provider算法列表

可以运行如下程序查看JDK的JCE默认提供的所有的算法列表:

 // 输出MarkDown格式的表格,具体内容见下表public static String printAllSecurityProvidersInMdTable() {StringBuilder stringBuilder = new StringBuilder();stringBuilder.append("Provider Name|Provider Version|Algorithm Type|Algorithm Name\r\n");stringBuilder.append("|:-|:-|:-|:-\r\n");Map<String, Map<String, String>> providers2Algorithms = Arrays.stream(Security.getProviders()).collect(Collectors.toMap(provider -> provider.getName() + "@" + provider.getVersion(), provider -> provider.getServices().stream().collect(Collectors.toMap(service -> service.getType(), service -> service.getAlgorithm(), (algorithm1, algorithm2) -> algorithm1 + "@" + algorithm2))));providers2Algorithms.entrySet().stream().sorted(Comparator.comparing(Map.Entry::getKey)).forEachOrdered(entryProvider -> {String[] provider = entryProvider.getKey().split("@");Map<String, String> algoType2AlgoName = entryProvider.getValue();int[] rowNumber = {0};algoType2AlgoName.entrySet().stream().sorted(Comparator.comparing(Map.Entry::getKey)).forEachOrdered(entryAlgorithm -> {StringBuilder algorithmCellStr = new StringBuilder();int[] numberOfAlgorithm = {1};Arrays.stream(entryAlgorithm.getValue().split("@")).sorted(String::compareTo).forEachOrdered(algorithm -> {algorithmCellStr.append(algorithm);if (0 == numberOfAlgorithm[0] % 1) {algorithmCellStr.append("<br>");}numberOfAlgorithm[0]++;});stringBuilder.append(String.format("|%s|%s|%s|%s\r\n", 0 == rowNumber[0] ? provider[0] : "", 0 == rowNumber[0] ? provider[1] : "", entryAlgorithm.getKey(), algorithmCellStr.toString()));rowNumber[0]++;});});return stringBuilder.toString();}// 输出纯文本格式public static void printAllSecurityProviders() {for (Provider provider : Security.getProviders()){System.out.println("Provider: " + provider.getName() + " (ver " + provider.getVersion() + ")");System.out.print("  Algorithms: ");ArrayList<String> algos = new ArrayList<String>();for (Provider.Service service : provider.getServices()){algos.add(String.format( "%s (%s)", service.getAlgorithm(), service.getType()));}java.util.Collections.sort(algos);String algorsStr = algos.toString();algorsStr = algorsStr.substring(1, algorsStr.length()-1);System.out.println(algorsStr);System.out.println();}}

在JDK8中输出如下:

Provider Name Provider Version Algorithm Type Algorithm Name
SUN 1.8 AlgorithmParameterGenerator DSA
AlgorithmParameters DSA
CertPathBuilder PKIX
CertPathValidator PKIX
CertStore Collection
LDAP
com.sun.security.IndexedCollection
CertificateFactory X.509
Configuration JavaLoginConfig
KeyFactory DSA
KeyPairGenerator DSA
KeyStore CaseExactJKS
DKS
JKS
MessageDigest MD2
MD5
SHA
SHA-224
SHA-256
SHA-384
SHA-512
Policy JavaPolicy
SecureRandom SHA1PRNG
Signature NONEwithDSA
SHA1withDSA
SHA224withDSA
SHA256withDSA
SunEC 1.8 AlgorithmParameters EC
KeyAgreement ECDH
KeyFactory EC
KeyPairGenerator EC
Signature NONEwithECDSA
SHA1withECDSA
SHA224withECDSA
SHA256withECDSA
SHA384withECDSA
SHA512withECDSA
SunJCE 1.8 AlgorithmParameterGenerator DiffieHellman
AlgorithmParameters AES
Blowfish
DES
DESede
DiffieHellman
GCM
OAEP
PBE
PBES2
PBEWithHmacSHA1AndAES_128
PBEWithHmacSHA1AndAES_256
PBEWithHmacSHA224AndAES_128
PBEWithHmacSHA224AndAES_256
PBEWithHmacSHA256AndAES_128
PBEWithHmacSHA256AndAES_256
PBEWithHmacSHA384AndAES_128
PBEWithHmacSHA384AndAES_256
PBEWithHmacSHA512AndAES_128
PBEWithHmacSHA512AndAES_256
PBEWithMD5AndDES
PBEWithMD5AndTripleDES
PBEWithSHA1AndDESede
PBEWithSHA1AndRC2_128
PBEWithSHA1AndRC2_40
PBEWithSHA1AndRC4_128
PBEWithSHA1AndRC4_40
RC2
Cipher AES
AESWrap
AESWrap_128
AESWrap_192
AESWrap_256
AES_128/CBC/NoPadding
AES_128/CFB/NoPadding
AES_128/ECB/NoPadding
AES_128/GCM/NoPadding
AES_128/OFB/NoPadding
AES_192/CBC/NoPadding
AES_192/CFB/NoPadding
AES_192/ECB/NoPadding
AES_192/GCM/NoPadding
AES_192/OFB/NoPadding
AES_256/CBC/NoPadding
AES_256/CFB/NoPadding
AES_256/ECB/NoPadding
AES_256/GCM/NoPadding
AES_256/OFB/NoPadding
ARCFOUR
Blowfish
DES
DESede
DESedeWrap
PBEWithHmacSHA1AndAES_128
PBEWithHmacSHA1AndAES_256
PBEWithHmacSHA224AndAES_128
PBEWithHmacSHA224AndAES_256
PBEWithHmacSHA256AndAES_128
PBEWithHmacSHA256AndAES_256
PBEWithHmacSHA384AndAES_128
PBEWithHmacSHA384AndAES_256
PBEWithHmacSHA512AndAES_128
PBEWithHmacSHA512AndAES_256
PBEWithMD5AndDES
PBEWithMD5AndTripleDES
PBEWithSHA1AndDESede
PBEWithSHA1AndRC2_128
PBEWithSHA1AndRC2_40
PBEWithSHA1AndRC4_128
PBEWithSHA1AndRC4_40
RC2
RSA
KeyAgreement DiffieHellman
KeyFactory DiffieHellman
KeyGenerator AES
ARCFOUR
Blowfish
DES
DESede
HmacMD5
HmacSHA1
HmacSHA224
HmacSHA256
HmacSHA384
HmacSHA512
RC2
SunTls12Prf
SunTlsKeyMaterial
SunTlsMasterSecret
SunTlsPrf
SunTlsRsaPremasterSecret
KeyPairGenerator DiffieHellman
KeyStore JCEKS
Mac HmacMD5
HmacPBESHA1
HmacSHA1
HmacSHA224
HmacSHA256
HmacSHA384
HmacSHA512
PBEWithHmacSHA1
PBEWithHmacSHA224
PBEWithHmacSHA256
PBEWithHmacSHA384
PBEWithHmacSHA512
SslMacMD5
SslMacSHA1
SecretKeyFactory DES
DESede
PBEWithHmacSHA1AndAES_128
PBEWithHmacSHA1AndAES_256
PBEWithHmacSHA224AndAES_128
PBEWithHmacSHA224AndAES_256
PBEWithHmacSHA256AndAES_128
PBEWithHmacSHA256AndAES_256
PBEWithHmacSHA384AndAES_128
PBEWithHmacSHA384AndAES_256
PBEWithHmacSHA512AndAES_128
PBEWithHmacSHA512AndAES_256
PBEWithMD5AndDES
PBEWithMD5AndTripleDES
PBEWithSHA1AndDESede
PBEWithSHA1AndRC2_128
PBEWithSHA1AndRC2_40
PBEWithSHA1AndRC4_128
PBEWithSHA1AndRC4_40
PBKDF2WithHmacSHA1
PBKDF2WithHmacSHA224
PBKDF2WithHmacSHA256
PBKDF2WithHmacSHA384
PBKDF2WithHmacSHA512
SunJGSS 1.8 GssApiMechanism 1.2.840.113554.1.2.2
1.3.6.1.5.5.2
SunJSSE 1.8 KeyFactory RSA
KeyManagerFactory NewSunX509
SunX509
KeyPairGenerator RSA
KeyStore PKCS12
SSLContext Default
TLS
TLSv1
TLSv1.1
TLSv1.2
Signature MD2withRSA
MD5andSHA1withRSA
MD5withRSA
SHA1withRSA
TrustManagerFactory PKIX
SunX509
SunMSCAPI 1.8 Cipher RSA
RSA/ECB/PKCS1Padding
KeyPairGenerator RSA
KeyStore Windows-MY
Windows-ROOT
SecureRandom Windows-PRNG
Signature MD2withRSA
MD5withRSA
NONEwithRSA
SHA1withRSA
SHA256withRSA
SHA384withRSA
SHA512withRSA
SunPCSC 1.8 TerminalFactory PC/SC
SunRsaSign 1.8 KeyFactory RSA
KeyPairGenerator RSA
Signature MD2withRSA
MD5withRSA
SHA1withRSA
SHA224withRSA
SHA256withRSA
SHA384withRSA
SHA512withRSA
SunSASL 1.8 SaslClientFactory CRAM-MD5
DIGEST-MD5
EXTERNAL
GSSAPI
NTLM
PLAIN
SaslServerFactory CRAM-MD5
DIGEST-MD5
GSSAPI
NTLM
XMLDSig 1.8 KeyInfoFactory DOM
TransformService http://www.w3.org/2000/09/xmldsig#base64
http://www.w3.org/2000/09/xmldsig#enveloped-signature
http://www.w3.org/2001/10/xml-exc-c14n#
http://www.w3.org/2001/10/xml-exc-c14n#WithComments
http://www.w3.org/2002/06/xmldsig-filter2
http://www.w3.org/2006/12/xml-c14n11
http://www.w3.org/2006/12/xml-c14n11#WithComments
http://www.w3.org/TR/1999/REC-xpath-19991116
http://www.w3.org/TR/1999/REC-xslt-19991116
http://www.w3.org/TR/2001/REC-xml-c14n-20010315
http://www.w3.org/TR/2001/REC-xml-c14n-20010315#WithComments
XMLSignatureFactory DOM

其中SunJCE的实现如下:

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//package com.sun.crypto.provider;import java.security.AccessController;
import java.security.PrivilegedAction;
import java.security.Provider;
import java.security.SecureRandom;public final class SunJCE extends Provider {private static final long serialVersionUID = 6812507587804302833L;private static final String info = "SunJCE Provider (implements RSA, DES, Triple DES, AES, Blowfish, ARCFOUR, RC2, PBE, Diffie-Hellman, HMAC)";private static final String OID_PKCS12_RC4_128 = "1.2.840.113549.1.12.1.1";private static final String OID_PKCS12_RC4_40 = "1.2.840.113549.1.12.1.2";private static final String OID_PKCS12_DESede = "1.2.840.113549.1.12.1.3";private static final String OID_PKCS12_RC2_128 = "1.2.840.113549.1.12.1.5";private static final String OID_PKCS12_RC2_40 = "1.2.840.113549.1.12.1.6";private static final String OID_PKCS5_MD5_DES = "1.2.840.113549.1.5.3";private static final String OID_PKCS5_PBKDF2 = "1.2.840.113549.1.5.12";private static final String OID_PKCS5_PBES2 = "1.2.840.113549.1.5.13";private static final String OID_PKCS3 = "1.2.840.113549.1.3.1";static final boolean debug = false;private static volatile SunJCE instance = null;static SecureRandom getRandom() {return SunJCE.SecureRandomHolder.RANDOM;}public SunJCE() {super("SunJCE", 1.8D, "SunJCE Provider (implements RSA, DES, Triple DES, AES, Blowfish, ARCFOUR, RC2, PBE, Diffie-Hellman, HMAC)");AccessController.doPrivileged(new PrivilegedAction<Object>() {public Object run() {SunJCE.this.put("Cipher.RSA", "com.sun.crypto.provider.RSACipher");SunJCE.this.put("Cipher.RSA SupportedModes", "ECB");SunJCE.this.put("Cipher.RSA SupportedPaddings", "NOPADDING|PKCS1PADDING|OAEPPADDING|OAEPWITHMD5ANDMGF1PADDING|OAEPWITHSHA1ANDMGF1PADDING|OAEPWITHSHA-1ANDMGF1PADDING|OAEPWITHSHA-224ANDMGF1PADDING|OAEPWITHSHA-256ANDMGF1PADDING|OAEPWITHSHA-384ANDMGF1PADDING|OAEPWITHSHA-512ANDMGF1PADDING");SunJCE.this.put("Cipher.RSA SupportedKeyClasses", "java.security.interfaces.RSAPublicKey|java.security.interfaces.RSAPrivateKey");SunJCE.this.put("Cipher.DES", "com.sun.crypto.provider.DESCipher");SunJCE.this.put("Cipher.DES SupportedModes", "ECB|CBC|PCBC|CTR|CTS|CFB|OFB|CFB8|CFB16|CFB24|CFB32|CFB40|CFB48|CFB56|CFB64|OFB8|OFB16|OFB24|OFB32|OFB40|OFB48|OFB56|OFB64");SunJCE.this.put("Cipher.DES SupportedPaddings", "NOPADDING|PKCS5PADDING|ISO10126PADDING");SunJCE.this.put("Cipher.DES SupportedKeyFormats", "RAW");SunJCE.this.put("Cipher.DESede", "com.sun.crypto.provider.DESedeCipher");SunJCE.this.put("Alg.Alias.Cipher.TripleDES", "DESede");SunJCE.this.put("Cipher.DESede SupportedModes", "ECB|CBC|PCBC|CTR|CTS|CFB|OFB|CFB8|CFB16|CFB24|CFB32|CFB40|CFB48|CFB56|CFB64|OFB8|OFB16|OFB24|OFB32|OFB40|OFB48|OFB56|OFB64");SunJCE.this.put("Cipher.DESede SupportedPaddings", "NOPADDING|PKCS5PADDING|ISO10126PADDING");SunJCE.this.put("Cipher.DESede SupportedKeyFormats", "RAW");SunJCE.this.put("Cipher.DESedeWrap", "com.sun.crypto.provider.DESedeWrapCipher");SunJCE.this.put("Cipher.DESedeWrap SupportedModes", "CBC");SunJCE.this.put("Cipher.DESedeWrap SupportedPaddings", "NOPADDING");SunJCE.this.put("Cipher.DESedeWrap SupportedKeyFormats", "RAW");SunJCE.this.put("Cipher.PBEWithMD5AndDES", "com.sun.crypto.provider.PBEWithMD5AndDESCipher");SunJCE.this.put("Alg.Alias.Cipher.OID.1.2.840.113549.1.5.3", "PBEWithMD5AndDES");SunJCE.this.put("Alg.Alias.Cipher.1.2.840.113549.1.5.3", "PBEWithMD5AndDES");SunJCE.this.put("Cipher.PBEWithMD5AndTripleDES", "com.sun.crypto.provider.PBEWithMD5AndTripleDESCipher");SunJCE.this.put("Cipher.PBEWithSHA1AndDESede", "com.sun.crypto.provider.PKCS12PBECipherCore$PBEWithSHA1AndDESede");SunJCE.this.put("Alg.Alias.Cipher.OID.1.2.840.113549.1.12.1.3", "PBEWithSHA1AndDESede");SunJCE.this.put("Alg.Alias.Cipher.1.2.840.113549.1.12.1.3", "PBEWithSHA1AndDESede");SunJCE.this.put("Cipher.PBEWithSHA1AndRC2_40", "com.sun.crypto.provider.PKCS12PBECipherCore$PBEWithSHA1AndRC2_40");SunJCE.this.put("Alg.Alias.Cipher.OID.1.2.840.113549.1.12.1.6", "PBEWithSHA1AndRC2_40");SunJCE.this.put("Alg.Alias.Cipher.1.2.840.113549.1.12.1.6", "PBEWithSHA1AndRC2_40");SunJCE.this.put("Cipher.PBEWithSHA1AndRC2_128", "com.sun.crypto.provider.PKCS12PBECipherCore$PBEWithSHA1AndRC2_128");SunJCE.this.put("Alg.Alias.Cipher.OID.1.2.840.113549.1.12.1.5", "PBEWithSHA1AndRC2_128");SunJCE.this.put("Alg.Alias.Cipher.1.2.840.113549.1.12.1.5", "PBEWithSHA1AndRC2_128");SunJCE.this.put("Cipher.PBEWithSHA1AndRC4_40", "com.sun.crypto.provider.PKCS12PBECipherCore$PBEWithSHA1AndRC4_40");SunJCE.this.put("Alg.Alias.Cipher.OID.1.2.840.113549.1.12.1.2", "PBEWithSHA1AndRC4_40");SunJCE.this.put("Alg.Alias.Cipher.1.2.840.113549.1.12.1.2", "PBEWithSHA1AndRC4_40");SunJCE.this.put("Cipher.PBEWithSHA1AndRC4_128", "com.sun.crypto.provider.PKCS12PBECipherCore$PBEWithSHA1AndRC4_128");SunJCE.this.put("Alg.Alias.Cipher.OID.1.2.840.113549.1.12.1.1", "PBEWithSHA1AndRC4_128");SunJCE.this.put("Alg.Alias.Cipher.1.2.840.113549.1.12.1.1", "PBEWithSHA1AndRC4_128");SunJCE.this.put("Cipher.PBEWithHmacSHA1AndAES_128", "com.sun.crypto.provider.PBES2Core$HmacSHA1AndAES_128");SunJCE.this.put("Cipher.PBEWithHmacSHA224AndAES_128", "com.sun.crypto.provider.PBES2Core$HmacSHA224AndAES_128");SunJCE.this.put("Cipher.PBEWithHmacSHA256AndAES_128", "com.sun.crypto.provider.PBES2Core$HmacSHA256AndAES_128");SunJCE.this.put("Cipher.PBEWithHmacSHA384AndAES_128", "com.sun.crypto.provider.PBES2Core$HmacSHA384AndAES_128");SunJCE.this.put("Cipher.PBEWithHmacSHA512AndAES_128", "com.sun.crypto.provider.PBES2Core$HmacSHA512AndAES_128");SunJCE.this.put("Cipher.PBEWithHmacSHA1AndAES_256", "com.sun.crypto.provider.PBES2Core$HmacSHA1AndAES_256");SunJCE.this.put("Cipher.PBEWithHmacSHA224AndAES_256", "com.sun.crypto.provider.PBES2Core$HmacSHA224AndAES_256");SunJCE.this.put("Cipher.PBEWithHmacSHA256AndAES_256", "com.sun.crypto.provider.PBES2Core$HmacSHA256AndAES_256");SunJCE.this.put("Cipher.PBEWithHmacSHA384AndAES_256", "com.sun.crypto.provider.PBES2Core$HmacSHA384AndAES_256");SunJCE.this.put("Cipher.PBEWithHmacSHA512AndAES_256", "com.sun.crypto.provider.PBES2Core$HmacSHA512AndAES_256");SunJCE.this.put("Cipher.Blowfish", "com.sun.crypto.provider.BlowfishCipher");SunJCE.this.put("Cipher.Blowfish SupportedModes", "ECB|CBC|PCBC|CTR|CTS|CFB|OFB|CFB8|CFB16|CFB24|CFB32|CFB40|CFB48|CFB56|CFB64|OFB8|OFB16|OFB24|OFB32|OFB40|OFB48|OFB56|OFB64");SunJCE.this.put("Cipher.Blowfish SupportedPaddings", "NOPADDING|PKCS5PADDING|ISO10126PADDING");SunJCE.this.put("Cipher.Blowfish SupportedKeyFormats", "RAW");SunJCE.this.put("Cipher.AES", "com.sun.crypto.provider.AESCipher$General");SunJCE.this.put("Alg.Alias.Cipher.Rijndael", "AES");SunJCE.this.put("Cipher.AES SupportedModes", "ECB|CBC|PCBC|CTR|CTS|CFB|OFB|CFB8|CFB16|CFB24|CFB32|CFB40|CFB48|CFB56|CFB64|OFB8|OFB16|OFB24|OFB32|OFB40|OFB48|OFB56|OFB64|GCM|CFB72|CFB80|CFB88|CFB96|CFB104|CFB112|CFB120|CFB128|OFB72|OFB80|OFB88|OFB96|OFB104|OFB112|OFB120|OFB128");SunJCE.this.put("Cipher.AES SupportedPaddings", "NOPADDING|PKCS5PADDING|ISO10126PADDING");SunJCE.this.put("Cipher.AES SupportedKeyFormats", "RAW");SunJCE.this.put("Cipher.AES_128/ECB/NoPadding", "com.sun.crypto.provider.AESCipher$AES128_ECB_NoPadding");SunJCE.this.put("Alg.Alias.Cipher.2.16.840.1.101.3.4.1.1", "AES_128/ECB/NoPadding");SunJCE.this.put("Alg.Alias.Cipher.OID.2.16.840.1.101.3.4.1.1", "AES_128/ECB/NoPadding");SunJCE.this.put("Cipher.AES_128/CBC/NoPadding", "com.sun.crypto.provider.AESCipher$AES128_CBC_NoPadding");SunJCE.this.put("Alg.Alias.Cipher.2.16.840.1.101.3.4.1.2", "AES_128/CBC/NoPadding");SunJCE.this.put("Alg.Alias.Cipher.OID.2.16.840.1.101.3.4.1.2", "AES_128/CBC/NoPadding");SunJCE.this.put("Cipher.AES_128/OFB/NoPadding", "com.sun.crypto.provider.AESCipher$AES128_OFB_NoPadding");SunJCE.this.put("Alg.Alias.Cipher.2.16.840.1.101.3.4.1.3", "AES_128/OFB/NoPadding");SunJCE.this.put("Alg.Alias.Cipher.OID.2.16.840.1.101.3.4.1.3", "AES_128/OFB/NoPadding");SunJCE.this.put("Cipher.AES_128/CFB/NoPadding", "com.sun.crypto.provider.AESCipher$AES128_CFB_NoPadding");SunJCE.this.put("Alg.Alias.Cipher.2.16.840.1.101.3.4.1.4", "AES_128/CFB/NoPadding");SunJCE.this.put("Alg.Alias.Cipher.OID.2.16.840.1.101.3.4.1.4", "AES_128/CFB/NoPadding");SunJCE.this.put("Cipher.AES_128/GCM/NoPadding", "com.sun.crypto.provider.AESCipher$AES128_GCM_NoPadding");SunJCE.this.put("Alg.Alias.Cipher.2.16.840.1.101.3.4.1.6", "AES_128/GCM/NoPadding");SunJCE.this.put("Alg.Alias.Cipher.OID.2.16.840.1.101.3.4.1.6", "AES_128/GCM/NoPadding");SunJCE.this.put("Cipher.AES_192/ECB/NoPadding", "com.sun.crypto.provider.AESCipher$AES192_ECB_NoPadding");SunJCE.this.put("Alg.Alias.Cipher.2.16.840.1.101.3.4.1.21", "AES_192/ECB/NoPadding");SunJCE.this.put("Alg.Alias.Cipher.OID.2.16.840.1.101.3.4.1.21", "AES_192/ECB/NoPadding");SunJCE.this.put("Cipher.AES_192/CBC/NoPadding", "com.sun.crypto.provider.AESCipher$AES192_CBC_NoPadding");SunJCE.this.put("Alg.Alias.Cipher.2.16.840.1.101.3.4.1.22", "AES_192/CBC/NoPadding");SunJCE.this.put("Alg.Alias.Cipher.OID.2.16.840.1.101.3.4.1.22", "AES_192/CBC/NoPadding");SunJCE.this.put("Cipher.AES_192/OFB/NoPadding", "com.sun.crypto.provider.AESCipher$AES192_OFB_NoPadding");SunJCE.this.put("Alg.Alias.Cipher.2.16.840.1.101.3.4.1.23", "AES_192/OFB/NoPadding");SunJCE.this.put("Alg.Alias.Cipher.OID.2.16.840.1.101.3.4.1.23", "AES_192/OFB/NoPadding");SunJCE.this.put("Cipher.AES_192/CFB/NoPadding", "com.sun.crypto.provider.AESCipher$AES192_CFB_NoPadding");SunJCE.this.put("Alg.Alias.Cipher.2.16.840.1.101.3.4.1.24", "AES_192/CFB/NoPadding");SunJCE.this.put("Alg.Alias.Cipher.OID.2.16.840.1.101.3.4.1.24", "AES_192/CFB/NoPadding");SunJCE.this.put("Cipher.AES_192/GCM/NoPadding", "com.sun.crypto.provider.AESCipher$AES192_GCM_NoPadding");SunJCE.this.put("Alg.Alias.Cipher.2.16.840.1.101.3.4.1.26", "AES_192/GCM/NoPadding");SunJCE.this.put("Alg.Alias.Cipher.OID.2.16.840.1.101.3.4.1.26", "AES_192/GCM/NoPadding");SunJCE.this.put("Cipher.AES_256/ECB/NoPadding", "com.sun.crypto.provider.AESCipher$AES256_ECB_NoPadding");SunJCE.this.put("Alg.Alias.Cipher.2.16.840.1.101.3.4.1.41", "AES_256/ECB/NoPadding");SunJCE.this.put("Alg.Alias.Cipher.OID.2.16.840.1.101.3.4.1.41", "AES_256/ECB/NoPadding");SunJCE.this.put("Cipher.AES_256/CBC/NoPadding", "com.sun.crypto.provider.AESCipher$AES256_CBC_NoPadding");SunJCE.this.put("Alg.Alias.Cipher.2.16.840.1.101.3.4.1.42", "AES_256/CBC/NoPadding");SunJCE.this.put("Alg.Alias.Cipher.OID.2.16.840.1.101.3.4.1.42", "AES_256/CBC/NoPadding");SunJCE.this.put("Cipher.AES_256/OFB/NoPadding", "com.sun.crypto.provider.AESCipher$AES256_OFB_NoPadding");SunJCE.this.put("Alg.Alias.Cipher.2.16.840.1.101.3.4.1.43", "AES_256/OFB/NoPadding");SunJCE.this.put("Alg.Alias.Cipher.OID.2.16.840.1.101.3.4.1.43", "AES_256/OFB/NoPadding");SunJCE.this.put("Cipher.AES_256/CFB/NoPadding", "com.sun.crypto.provider.AESCipher$AES256_CFB_NoPadding");SunJCE.this.put("Alg.Alias.Cipher.2.16.840.1.101.3.4.1.44", "AES_256/CFB/NoPadding");SunJCE.this.put("Alg.Alias.Cipher.OID.2.16.840.1.101.3.4.1.44", "AES_256/CFB/NoPadding");SunJCE.this.put("Cipher.AES_256/GCM/NoPadding", "com.sun.crypto.provider.AESCipher$AES256_GCM_NoPadding");SunJCE.this.put("Alg.Alias.Cipher.2.16.840.1.101.3.4.1.46", "AES_256/GCM/NoPadding");SunJCE.this.put("Alg.Alias.Cipher.OID.2.16.840.1.101.3.4.1.46", "AES_256/GCM/NoPadding");SunJCE.this.put("Cipher.AESWrap", "com.sun.crypto.provider.AESWrapCipher$General");SunJCE.this.put("Cipher.AESWrap SupportedModes", "ECB");SunJCE.this.put("Cipher.AESWrap SupportedPaddings", "NOPADDING");SunJCE.this.put("Cipher.AESWrap SupportedKeyFormats", "RAW");SunJCE.this.put("Cipher.AESWrap_128", "com.sun.crypto.provider.AESWrapCipher$AES128");SunJCE.this.put("Alg.Alias.Cipher.2.16.840.1.101.3.4.1.5", "AESWrap_128");SunJCE.this.put("Alg.Alias.Cipher.OID.2.16.840.1.101.3.4.1.5", "AESWrap_128");SunJCE.this.put("Cipher.AESWrap_192", "com.sun.crypto.provider.AESWrapCipher$AES192");SunJCE.this.put("Alg.Alias.Cipher.2.16.840.1.101.3.4.1.25", "AESWrap_192");SunJCE.this.put("Alg.Alias.Cipher.OID.2.16.840.1.101.3.4.1.25", "AESWrap_192");SunJCE.this.put("Cipher.AESWrap_256", "com.sun.crypto.provider.AESWrapCipher$AES256");SunJCE.this.put("Alg.Alias.Cipher.2.16.840.1.101.3.4.1.45", "AESWrap_256");SunJCE.this.put("Alg.Alias.Cipher.OID.2.16.840.1.101.3.4.1.45", "AESWrap_256");SunJCE.this.put("Cipher.RC2", "com.sun.crypto.provider.RC2Cipher");SunJCE.this.put("Cipher.RC2 SupportedModes", "ECB|CBC|PCBC|CTR|CTS|CFB|OFB|CFB8|CFB16|CFB24|CFB32|CFB40|CFB48|CFB56|CFB64|OFB8|OFB16|OFB24|OFB32|OFB40|OFB48|OFB56|OFB64");SunJCE.this.put("Cipher.RC2 SupportedPaddings", "NOPADDING|PKCS5PADDING|ISO10126PADDING");SunJCE.this.put("Cipher.RC2 SupportedKeyFormats", "RAW");SunJCE.this.put("Cipher.ARCFOUR", "com.sun.crypto.provider.ARCFOURCipher");SunJCE.this.put("Alg.Alias.Cipher.RC4", "ARCFOUR");SunJCE.this.put("Cipher.ARCFOUR SupportedModes", "ECB");SunJCE.this.put("Cipher.ARCFOUR SupportedPaddings", "NOPADDING");SunJCE.this.put("Cipher.ARCFOUR SupportedKeyFormats", "RAW");SunJCE.this.put("KeyGenerator.DES", "com.sun.crypto.provider.DESKeyGenerator");SunJCE.this.put("KeyGenerator.DESede", "com.sun.crypto.provider.DESedeKeyGenerator");SunJCE.this.put("Alg.Alias.KeyGenerator.TripleDES", "DESede");SunJCE.this.put("KeyGenerator.Blowfish", "com.sun.crypto.provider.BlowfishKeyGenerator");SunJCE.this.put("KeyGenerator.AES", "com.sun.crypto.provider.AESKeyGenerator");SunJCE.this.put("Alg.Alias.KeyGenerator.Rijndael", "AES");SunJCE.this.put("KeyGenerator.RC2", "com.sun.crypto.provider.KeyGeneratorCore$RC2KeyGenerator");SunJCE.this.put("KeyGenerator.ARCFOUR", "com.sun.crypto.provider.KeyGeneratorCore$ARCFOURKeyGenerator");SunJCE.this.put("Alg.Alias.KeyGenerator.RC4", "ARCFOUR");SunJCE.this.put("KeyGenerator.HmacMD5", "com.sun.crypto.provider.HmacMD5KeyGenerator");SunJCE.this.put("KeyGenerator.HmacSHA1", "com.sun.crypto.provider.HmacSHA1KeyGenerator");SunJCE.this.put("Alg.Alias.KeyGenerator.OID.1.2.840.113549.2.7", "HmacSHA1");SunJCE.this.put("Alg.Alias.KeyGenerator.1.2.840.113549.2.7", "HmacSHA1");SunJCE.this.put("KeyGenerator.HmacSHA224", "com.sun.crypto.provider.KeyGeneratorCore$HmacSHA2KG$SHA224");SunJCE.this.put("Alg.Alias.KeyGenerator.OID.1.2.840.113549.2.8", "HmacSHA224");SunJCE.this.put("Alg.Alias.KeyGenerator.1.2.840.113549.2.8", "HmacSHA224");SunJCE.this.put("KeyGenerator.HmacSHA256", "com.sun.crypto.provider.KeyGeneratorCore$HmacSHA2KG$SHA256");SunJCE.this.put("Alg.Alias.KeyGenerator.OID.1.2.840.113549.2.9", "HmacSHA256");SunJCE.this.put("Alg.Alias.KeyGenerator.1.2.840.113549.2.9", "HmacSHA256");SunJCE.this.put("KeyGenerator.HmacSHA384", "com.sun.crypto.provider.KeyGeneratorCore$HmacSHA2KG$SHA384");SunJCE.this.put("Alg.Alias.KeyGenerator.OID.1.2.840.113549.2.10", "HmacSHA384");SunJCE.this.put("Alg.Alias.KeyGenerator.1.2.840.113549.2.10", "HmacSHA384");SunJCE.this.put("KeyGenerator.HmacSHA512", "com.sun.crypto.provider.KeyGeneratorCore$HmacSHA2KG$SHA512");SunJCE.this.put("Alg.Alias.KeyGenerator.OID.1.2.840.113549.2.11", "HmacSHA512");SunJCE.this.put("Alg.Alias.KeyGenerator.1.2.840.113549.2.11", "HmacSHA512");SunJCE.this.put("KeyPairGenerator.DiffieHellman", "com.sun.crypto.provider.DHKeyPairGenerator");SunJCE.this.put("Alg.Alias.KeyPairGenerator.DH", "DiffieHellman");SunJCE.this.put("Alg.Alias.KeyPairGenerator.OID.1.2.840.113549.1.3.1", "DiffieHellman");SunJCE.this.put("Alg.Alias.KeyPairGenerator.1.2.840.113549.1.3.1", "DiffieHellman");SunJCE.this.put("AlgorithmParameterGenerator.DiffieHellman", "com.sun.crypto.provider.DHParameterGenerator");SunJCE.this.put("Alg.Alias.AlgorithmParameterGenerator.DH", "DiffieHellman");SunJCE.this.put("Alg.Alias.AlgorithmParameterGenerator.OID.1.2.840.113549.1.3.1", "DiffieHellman");SunJCE.this.put("Alg.Alias.AlgorithmParameterGenerator.1.2.840.113549.1.3.1", "DiffieHellman");SunJCE.this.put("KeyAgreement.DiffieHellman", "com.sun.crypto.provider.DHKeyAgreement");SunJCE.this.put("Alg.Alias.KeyAgreement.DH", "DiffieHellman");SunJCE.this.put("Alg.Alias.KeyAgreement.OID.1.2.840.113549.1.3.1", "DiffieHellman");SunJCE.this.put("Alg.Alias.KeyAgreement.1.2.840.113549.1.3.1", "DiffieHellman");SunJCE.this.put("KeyAgreement.DiffieHellman SupportedKeyClasses", "javax.crypto.interfaces.DHPublicKey|javax.crypto.interfaces.DHPrivateKey");SunJCE.this.put("AlgorithmParameters.DiffieHellman", "com.sun.crypto.provider.DHParameters");SunJCE.this.put("Alg.Alias.AlgorithmParameters.DH", "DiffieHellman");SunJCE.this.put("Alg.Alias.AlgorithmParameters.OID.1.2.840.113549.1.3.1", "DiffieHellman");SunJCE.this.put("Alg.Alias.AlgorithmParameters.1.2.840.113549.1.3.1", "DiffieHellman");SunJCE.this.put("AlgorithmParameters.DES", "com.sun.crypto.provider.DESParameters");SunJCE.this.put("AlgorithmParameters.DESede", "com.sun.crypto.provider.DESedeParameters");SunJCE.this.put("Alg.Alias.AlgorithmParameters.TripleDES", "DESede");SunJCE.this.put("AlgorithmParameters.PBE", "com.sun.crypto.provider.PBEParameters");SunJCE.this.put("AlgorithmParameters.PBEWithMD5AndDES", "com.sun.crypto.provider.PBEParameters");SunJCE.this.put("Alg.Alias.AlgorithmParameters.OID.1.2.840.113549.1.5.3", "PBEWithMD5AndDES");SunJCE.this.put("Alg.Alias.AlgorithmParameters.1.2.840.113549.1.5.3", "PBEWithMD5AndDES");SunJCE.this.put("AlgorithmParameters.PBEWithMD5AndTripleDES", "com.sun.crypto.provider.PBEParameters");SunJCE.this.put("AlgorithmParameters.PBEWithSHA1AndDESede", "com.sun.crypto.provider.PBEParameters");SunJCE.this.put("Alg.Alias.AlgorithmParameters.OID.1.2.840.113549.1.12.1.3", "PBEWithSHA1AndDESede");SunJCE.this.put("Alg.Alias.AlgorithmParameters.1.2.840.113549.1.12.1.3", "PBEWithSHA1AndDESede");SunJCE.this.put("AlgorithmParameters.PBEWithSHA1AndRC2_40", "com.sun.crypto.provider.PBEParameters");SunJCE.this.put("Alg.Alias.AlgorithmParameters.OID.1.2.840.113549.1.12.1.6", "PBEWithSHA1AndRC2_40");SunJCE.this.put("Alg.Alias.AlgorithmParameters.1.2.840.113549.1.12.1.6", "PBEWithSHA1AndRC2_40");SunJCE.this.put("AlgorithmParameters.PBEWithSHA1AndRC2_128", "com.sun.crypto.provider.PBEParameters");SunJCE.this.put("Alg.Alias.AlgorithmParameters.OID.1.2.840.113549.1.12.1.5", "PBEWithSHA1AndRC2_128");SunJCE.this.put("Alg.Alias.AlgorithmParameters.1.2.840.113549.1.12.1.5", "PBEWithSHA1AndRC2_128");SunJCE.this.put("AlgorithmParameters.PBEWithSHA1AndRC4_40", "com.sun.crypto.provider.PBEParameters");SunJCE.this.put("Alg.Alias.AlgorithmParameters.OID.1.2.840.113549.1.12.1.2", "PBEWithSHA1AndRC4_40");SunJCE.this.put("Alg.Alias.AlgorithmParameters.1.2.840.113549.1.12.1.2", "PBEWithSHA1AndRC4_40");SunJCE.this.put("AlgorithmParameters.PBEWithSHA1AndRC4_128", "com.sun.crypto.provider.PBEParameters");SunJCE.this.put("Alg.Alias.AlgorithmParameters.OID.1.2.840.113549.1.12.1.1", "PBEWithSHA1AndRC4_128");SunJCE.this.put("Alg.Alias.AlgorithmParameters.1.2.840.113549.1.12.1.1", "PBEWithSHA1AndRC4_128");SunJCE.this.put("AlgorithmParameters.PBES2", "com.sun.crypto.provider.PBES2Parameters$General");SunJCE.this.put("Alg.Alias.AlgorithmParameters.OID.1.2.840.113549.1.5.13", "PBES2");SunJCE.this.put("Alg.Alias.AlgorithmParameters.1.2.840.113549.1.5.13", "PBES2");SunJCE.this.put("AlgorithmParameters.PBEWithHmacSHA1AndAES_128", "com.sun.crypto.provider.PBES2Parameters$HmacSHA1AndAES_128");SunJCE.this.put("AlgorithmParameters.PBEWithHmacSHA224AndAES_128", "com.sun.crypto.provider.PBES2Parameters$HmacSHA224AndAES_128");SunJCE.this.put("AlgorithmParameters.PBEWithHmacSHA256AndAES_128", "com.sun.crypto.provider.PBES2Parameters$HmacSHA256AndAES_128");SunJCE.this.put("AlgorithmParameters.PBEWithHmacSHA384AndAES_128", "com.sun.crypto.provider.PBES2Parameters$HmacSHA384AndAES_128");SunJCE.this.put("AlgorithmParameters.PBEWithHmacSHA512AndAES_128", "com.sun.crypto.provider.PBES2Parameters$HmacSHA512AndAES_128");SunJCE.this.put("AlgorithmParameters.PBEWithHmacSHA1AndAES_256", "com.sun.crypto.provider.PBES2Parameters$HmacSHA1AndAES_256");SunJCE.this.put("AlgorithmParameters.PBEWithHmacSHA224AndAES_256", "com.sun.crypto.provider.PBES2Parameters$HmacSHA224AndAES_256");SunJCE.this.put("AlgorithmParameters.PBEWithHmacSHA256AndAES_256", "com.sun.crypto.provider.PBES2Parameters$HmacSHA256AndAES_256");SunJCE.this.put("AlgorithmParameters.PBEWithHmacSHA384AndAES_256", "com.sun.crypto.provider.PBES2Parameters$HmacSHA384AndAES_256");SunJCE.this.put("AlgorithmParameters.PBEWithHmacSHA512AndAES_256", "com.sun.crypto.provider.PBES2Parameters$HmacSHA512AndAES_256");SunJCE.this.put("AlgorithmParameters.Blowfish", "com.sun.crypto.provider.BlowfishParameters");SunJCE.this.put("AlgorithmParameters.AES", "com.sun.crypto.provider.AESParameters");SunJCE.this.put("Alg.Alias.AlgorithmParameters.Rijndael", "AES");SunJCE.this.put("AlgorithmParameters.GCM", "com.sun.crypto.provider.GCMParameters");SunJCE.this.put("AlgorithmParameters.RC2", "com.sun.crypto.provider.RC2Parameters");SunJCE.this.put("AlgorithmParameters.OAEP", "com.sun.crypto.provider.OAEPParameters");SunJCE.this.put("KeyFactory.DiffieHellman", "com.sun.crypto.provider.DHKeyFactory");SunJCE.this.put("Alg.Alias.KeyFactory.DH", "DiffieHellman");SunJCE.this.put("Alg.Alias.KeyFactory.OID.1.2.840.113549.1.3.1", "DiffieHellman");SunJCE.this.put("Alg.Alias.KeyFactory.1.2.840.113549.1.3.1", "DiffieHellman");SunJCE.this.put("SecretKeyFactory.DES", "com.sun.crypto.provider.DESKeyFactory");SunJCE.this.put("SecretKeyFactory.DESede", "com.sun.crypto.provider.DESedeKeyFactory");SunJCE.this.put("Alg.Alias.SecretKeyFactory.TripleDES", "DESede");SunJCE.this.put("SecretKeyFactory.PBEWithMD5AndDES", "com.sun.crypto.provider.PBEKeyFactory$PBEWithMD5AndDES");SunJCE.this.put("Alg.Alias.SecretKeyFactory.OID.1.2.840.113549.1.5.3", "PBEWithMD5AndDES");SunJCE.this.put("Alg.Alias.SecretKeyFactory.1.2.840.113549.1.5.3", "PBEWithMD5AndDES");SunJCE.this.put("Alg.Alias.SecretKeyFactory.PBE", "PBEWithMD5AndDES");SunJCE.this.put("SecretKeyFactory.PBEWithMD5AndTripleDES", "com.sun.crypto.provider.PBEKeyFactory$PBEWithMD5AndTripleDES");SunJCE.this.put("SecretKeyFactory.PBEWithSHA1AndDESede", "com.sun.crypto.provider.PBEKeyFactory$PBEWithSHA1AndDESede");SunJCE.this.put("Alg.Alias.SecretKeyFactory.OID.1.2.840.113549.1.12.1.3", "PBEWithSHA1AndDESede");SunJCE.this.put("Alg.Alias.SecretKeyFactory.1.2.840.113549.1.12.1.3", "PBEWithSHA1AndDESede");SunJCE.this.put("SecretKeyFactory.PBEWithSHA1AndRC2_40", "com.sun.crypto.provider.PBEKeyFactory$PBEWithSHA1AndRC2_40");SunJCE.this.put("Alg.Alias.SecretKeyFactory.OID.1.2.840.113549.1.12.1.6", "PBEWithSHA1AndRC2_40");SunJCE.this.put("Alg.Alias.SecretKeyFactory.1.2.840.113549.1.12.1.6", "PBEWithSHA1AndRC2_40");SunJCE.this.put("SecretKeyFactory.PBEWithSHA1AndRC2_128", "com.sun.crypto.provider.PBEKeyFactory$PBEWithSHA1AndRC2_128");SunJCE.this.put("Alg.Alias.SecretKeyFactory.OID.1.2.840.113549.1.12.1.5", "PBEWithSHA1AndRC2_128");SunJCE.this.put("Alg.Alias.SecretKeyFactory.1.2.840.113549.1.12.1.5", "PBEWithSHA1AndRC2_128");SunJCE.this.put("SecretKeyFactory.PBEWithSHA1AndRC4_40", "com.sun.crypto.provider.PBEKeyFactory$PBEWithSHA1AndRC4_40");SunJCE.this.put("Alg.Alias.SecretKeyFactory.OID.1.2.840.113549.1.12.1.2", "PBEWithSHA1AndRC4_40");SunJCE.this.put("Alg.Alias.SecretKeyFactory.1.2.840.113549.1.12.1.2", "PBEWithSHA1AndRC4_40");SunJCE.this.put("SecretKeyFactory.PBEWithSHA1AndRC4_128", "com.sun.crypto.provider.PBEKeyFactory$PBEWithSHA1AndRC4_128");SunJCE.this.put("Alg.Alias.SecretKeyFactory.OID.1.2.840.113549.1.12.1.1", "PBEWithSHA1AndRC4_128");SunJCE.this.put("Alg.Alias.SecretKeyFactory.1.2.840.113549.1.12.1.1", "PBEWithSHA1AndRC4_128");SunJCE.this.put("SecretKeyFactory.PBEWithHmacSHA1AndAES_128", "com.sun.crypto.provider.PBEKeyFactory$PBEWithHmacSHA1AndAES_128");SunJCE.this.put("SecretKeyFactory.PBEWithHmacSHA224AndAES_128", "com.sun.crypto.provider.PBEKeyFactory$PBEWithHmacSHA224AndAES_128");SunJCE.this.put("SecretKeyFactory.PBEWithHmacSHA256AndAES_128", "com.sun.crypto.provider.PBEKeyFactory$PBEWithHmacSHA256AndAES_128");SunJCE.this.put("SecretKeyFactory.PBEWithHmacSHA384AndAES_128", "com.sun.crypto.provider.PBEKeyFactory$PBEWithHmacSHA384AndAES_128");SunJCE.this.put("SecretKeyFactory.PBEWithHmacSHA512AndAES_128", "com.sun.crypto.provider.PBEKeyFactory$PBEWithHmacSHA512AndAES_128");SunJCE.this.put("SecretKeyFactory.PBEWithHmacSHA1AndAES_256", "com.sun.crypto.provider.PBEKeyFactory$PBEWithHmacSHA1AndAES_256");SunJCE.this.put("SecretKeyFactory.PBEWithHmacSHA224AndAES_256", "com.sun.crypto.provider.PBEKeyFactory$PBEWithHmacSHA224AndAES_256");SunJCE.this.put("SecretKeyFactory.PBEWithHmacSHA256AndAES_256", "com.sun.crypto.provider.PBEKeyFactory$PBEWithHmacSHA256AndAES_256");SunJCE.this.put("SecretKeyFactory.PBEWithHmacSHA384AndAES_256", "com.sun.crypto.provider.PBEKeyFactory$PBEWithHmacSHA384AndAES_256");SunJCE.this.put("SecretKeyFactory.PBEWithHmacSHA512AndAES_256", "com.sun.crypto.provider.PBEKeyFactory$PBEWithHmacSHA512AndAES_256");SunJCE.this.put("SecretKeyFactory.PBKDF2WithHmacSHA1", "com.sun.crypto.provider.PBKDF2Core$HmacSHA1");SunJCE.this.put("Alg.Alias.SecretKeyFactory.OID.1.2.840.113549.1.5.12", "PBKDF2WithHmacSHA1");SunJCE.this.put("Alg.Alias.SecretKeyFactory.1.2.840.113549.1.5.12", "PBKDF2WithHmacSHA1");SunJCE.this.put("SecretKeyFactory.PBKDF2WithHmacSHA224", "com.sun.crypto.provider.PBKDF2Core$HmacSHA224");SunJCE.this.put("SecretKeyFactory.PBKDF2WithHmacSHA256", "com.sun.crypto.provider.PBKDF2Core$HmacSHA256");SunJCE.this.put("SecretKeyFactory.PBKDF2WithHmacSHA384", "com.sun.crypto.provider.PBKDF2Core$HmacSHA384");SunJCE.this.put("SecretKeyFactory.PBKDF2WithHmacSHA512", "com.sun.crypto.provider.PBKDF2Core$HmacSHA512");SunJCE.this.put("Mac.HmacMD5", "com.sun.crypto.provider.HmacMD5");SunJCE.this.put("Mac.HmacSHA1", "com.sun.crypto.provider.HmacSHA1");SunJCE.this.put("Alg.Alias.Mac.OID.1.2.840.113549.2.7", "HmacSHA1");SunJCE.this.put("Alg.Alias.Mac.1.2.840.113549.2.7", "HmacSHA1");SunJCE.this.put("Mac.HmacSHA224", "com.sun.crypto.provider.HmacCore$HmacSHA224");SunJCE.this.put("Alg.Alias.Mac.OID.1.2.840.113549.2.8", "HmacSHA224");SunJCE.this.put("Alg.Alias.Mac.1.2.840.113549.2.8", "HmacSHA224");SunJCE.this.put("Mac.HmacSHA256", "com.sun.crypto.provider.HmacCore$HmacSHA256");SunJCE.this.put("Alg.Alias.Mac.OID.1.2.840.113549.2.9", "HmacSHA256");SunJCE.this.put("Alg.Alias.Mac.1.2.840.113549.2.9", "HmacSHA256");SunJCE.this.put("Mac.HmacSHA384", "com.sun.crypto.provider.HmacCore$HmacSHA384");SunJCE.this.put("Alg.Alias.Mac.OID.1.2.840.113549.2.10", "HmacSHA384");SunJCE.this.put("Alg.Alias.Mac.1.2.840.113549.2.10", "HmacSHA384");SunJCE.this.put("Mac.HmacSHA512", "com.sun.crypto.provider.HmacCore$HmacSHA512");SunJCE.this.put("Alg.Alias.Mac.OID.1.2.840.113549.2.11", "HmacSHA512");SunJCE.this.put("Alg.Alias.Mac.1.2.840.113549.2.11", "HmacSHA512");SunJCE.this.put("Mac.HmacPBESHA1", "com.sun.crypto.provider.HmacPKCS12PBESHA1");SunJCE.this.put("Mac.PBEWithHmacSHA1", "com.sun.crypto.provider.PBMAC1Core$HmacSHA1");SunJCE.this.put("Mac.PBEWithHmacSHA224", "com.sun.crypto.provider.PBMAC1Core$HmacSHA224");SunJCE.this.put("Mac.PBEWithHmacSHA256", "com.sun.crypto.provider.PBMAC1Core$HmacSHA256");SunJCE.this.put("Mac.PBEWithHmacSHA384", "com.sun.crypto.provider.PBMAC1Core$HmacSHA384");SunJCE.this.put("Mac.PBEWithHmacSHA512", "com.sun.crypto.provider.PBMAC1Core$HmacSHA512");SunJCE.this.put("Mac.SslMacMD5", "com.sun.crypto.provider.SslMacCore$SslMacMD5");SunJCE.this.put("Mac.SslMacSHA1", "com.sun.crypto.provider.SslMacCore$SslMacSHA1");SunJCE.this.put("Mac.HmacMD5 SupportedKeyFormats", "RAW");SunJCE.this.put("Mac.HmacSHA1 SupportedKeyFormats", "RAW");SunJCE.this.put("Mac.HmacSHA224 SupportedKeyFormats", "RAW");SunJCE.this.put("Mac.HmacSHA256 SupportedKeyFormats", "RAW");SunJCE.this.put("Mac.HmacSHA384 SupportedKeyFormats", "RAW");SunJCE.this.put("Mac.HmacSHA512 SupportedKeyFormats", "RAW");SunJCE.this.put("Mac.HmacPBESHA1 SupportedKeyFormats", "RAW");SunJCE.this.put("Mac.PBEWithHmacSHA1 SupportedKeyFormatS", "RAW");SunJCE.this.put("Mac.PBEWithHmacSHA224 SupportedKeyFormats", "RAW");SunJCE.this.put("Mac.PBEWithHmacSHA256 SupportedKeyFormats", "RAW");SunJCE.this.put("Mac.PBEWithHmacSHA384 SupportedKeyFormats", "RAW");SunJCE.this.put("Mac.PBEWithHmacSHA512 SupportedKeyFormats", "RAW");SunJCE.this.put("Mac.SslMacMD5 SupportedKeyFormats", "RAW");SunJCE.this.put("Mac.SslMacSHA1 SupportedKeyFormats", "RAW");SunJCE.this.put("KeyStore.JCEKS", "com.sun.crypto.provider.JceKeyStore");SunJCE.this.put("KeyGenerator.SunTlsPrf", "com.sun.crypto.provider.TlsPrfGenerator$V10");SunJCE.this.put("KeyGenerator.SunTls12Prf", "com.sun.crypto.provider.TlsPrfGenerator$V12");SunJCE.this.put("KeyGenerator.SunTlsMasterSecret", "com.sun.crypto.provider.TlsMasterSecretGenerator");SunJCE.this.put("Alg.Alias.KeyGenerator.SunTls12MasterSecret", "SunTlsMasterSecret");SunJCE.this.put("Alg.Alias.KeyGenerator.SunTlsExtendedMasterSecret", "SunTlsMasterSecret");SunJCE.this.put("KeyGenerator.SunTlsKeyMaterial", "com.sun.crypto.provider.TlsKeyMaterialGenerator");SunJCE.this.put("Alg.Alias.KeyGenerator.SunTls12KeyMaterial", "SunTlsKeyMaterial");SunJCE.this.put("KeyGenerator.SunTlsRsaPremasterSecret", "com.sun.crypto.provider.TlsRsaPremasterSecretGenerator");SunJCE.this.put("Alg.Alias.KeyGenerator.SunTls12RsaPremasterSecret", "SunTlsRsaPremasterSecret");return null;}});if (instance == null) {instance = this;}}static SunJCE getInstance() {return instance == null ? new SunJCE() : instance;}private static class SecureRandomHolder {static final SecureRandom RANDOM = new SecureRandom();private SecureRandomHolder() {}}
}

代码位于sunjce_provider.jar中的com.sun.crypto.provider包下

3.2 添加Bouncy Castle Provider

有一些算法JDK中的Provider并没有提供,用户可以静态或动态添加其他provider。

除了jdk自带的加解密程序,另外两个主要的加解密算法的提供者为bouncy castleapache common codec,它们提供了额外的算法以及在JDK基础上提高了易用性。其中bouncy castle就提供了Provider的扩展,补充了JDK没有实现的一些算法。

下面我们就以bouncy castle为例,看看如何添加新的Provider扩展:

3.2.1 动态添加

  1. 首先添加POM依赖或直接下载jar包
 <dependency><groupId>org.bouncycastle</groupId><artifactId>bcprov-jdk18on</artifactId><version>1.72</version></dependency>
  1. 添加Provider实现类
 static {Security.addProvider(new BouncyCastleProvider());}
  1. 在实例化组件时显式指定Provider
 // 第二个参数就是中bouncy castle提供的Provider的名字Cipher.getInstance("AES/CBC/NoPadding", "BC");

3.2.2 静态添加

修改JDK的配置文件:%JDK_HOME%\jre\lib\security\java.security,添加最后一行:

security.provider.1=sun.security.provider.Sun
security.provider.2=sun.security.rsa.SunRsaSign
security.provider.3=sun.security.ec.SunEC
security.provider.4=com.sun.net.ssl.internal.ssl.Provider
security.provider.5=com.sun.crypto.provider.SunJCE
security.provider.6=sun.security.jgss.SunProvider
security.provider.7=com.sun.security.sasl.Provider
security.provider.8=org.jcp.xml.dsig.internal.dom.XMLDSigRI
security.provider.9=sun.security.smartcardio.SunPCSC
security.provider.10=sun.security.mscapi.SunMSCAPI
security.provider.11=org.bouncycastle.jce.provider.BouncyCastleProvider

3.2.3 Bouncy Castle Provider算法列表

添加了Bouncy Castle Provider之后,就可以使用上一节的程序输出“BC” provider支持的算法列表了:

Provider Name Provider Version Algorithm Type Algorithm Name
BC 1.72 AlgorithmParameterGenerator 1.2.804.2.1.1.1.1.1.3.5.1
1.2.804.2.1.1.1.1.1.3.5.2
1.2.804.2.1.1.1.1.1.3.5.3
1.2.840.113549.3.2
1.3.6.1.4.1.188.7.1.1.2
AES
ARIA
ARIACCM
ARIAGCM
CAMELLIA
CAST5
CCM
DES
DESEDE
DH
DSA
DSTU7624
ELGAMAL
GCM
GOST28147
GOST3410
IDEA
NOEKEON
OID.1.2.804.2.1.1.1.1.1.3.5.1
OID.1.2.804.2.1.1.1.1.1.3.5.2
OID.1.2.804.2.1.1.1.1.1.3.5.3
RC2
SEED
SHACAL-2
SM4
Shacal2
AlgorithmParameters 1.2.804.2.1.1.1.1.1.3.5.1
1.2.804.2.1.1.1.1.1.3.5.2
1.2.804.2.1.1.1.1.1.3.5.3
1.2.840.113549.3.2
1.3.6.1.4.1.188.7.1.1.2
AES
ARIA
BLOWFISH
CAMELLIA
CAST5
CAST6
CCM
CHACHA20-POLY1305
CHACHA7539
DES
DESEDE
DH
DSA
DSTU7624
EC
ECGOST3410
ECGOST3410-2012
ECIES
ELGAMAL
GCM
GOST28147
GOST3410
Grainv1
HC128
HC256
IDEA
IES
NOEKEON
OAEP
OID.1.2.804.2.1.1.1.1.1.3.5.1
OID.1.2.804.2.1.1.1.1.1.3.5.2
OID.1.2.804.2.1.1.1.1.1.3.5.3
PBKDF1
PBKDF2
PKCS12PBE
PSS
RC2
RC5
RC5-64
RC6
RIJNDAEL
SALSA20
SEED
SHACAL-2
SKIPJACK
SM4
Serpent
Shacal2
TEA
Threefish-1024
Threefish-256
Threefish-512
Tnepres
Twofish
XSALSA20
XTEA
ZUC-128
ZUC-256
CertPathBuilder PKIX
RFC3280
RFC3281
CertPathValidator PKIX
RFC3280
RFC3281
CertStore Collection
LDAP
Multi
CertificateFactory X.509
Cipher 1.2.392.200011.61.1.1.1.2
1.2.392.200011.61.1.1.1.3
1.2.392.200011.61.1.1.1.4
1.2.410.200004.1.4
1.2.410.200046.1.1.1
1.2.410.200046.1.1.11
1.2.410.200046.1.1.12
1.2.410.200046.1.1.13
1.2.410.200046.1.1.14
1.2.410.200046.1.1.2
1.2.410.200046.1.1.3
1.2.410.200046.1.1.4
1.2.410.200046.1.1.6
1.2.410.200046.1.1.7
1.2.410.200046.1.1.8
1.2.410.200046.1.1.9
1.2.643.2.2.13.0
1.2.643.2.2.13.1
1.2.643.2.2.21
1.2.804.2.1.1.1.1.1.3.1.1
1.2.804.2.1.1.1.1.1.3.1.2
1.2.804.2.1.1.1.1.1.3.1.3
1.2.804.2.1.1.1.1.1.3.2.1
1.2.804.2.1.1.1.1.1.3.2.2
1.2.804.2.1.1.1.1.1.3.2.3
1.2.804.2.1.1.1.1.1.3.3.1
1.2.804.2.1.1.1.1.1.3.3.2
1.2.804.2.1.1.1.1.1.3.3.3
1.2.804.2.1.1.1.1.1.3.5.1
1.2.804.2.1.1.1.1.1.3.5.2
1.2.804.2.1.1.1.1.1.3.5.3
1.2.804.2.1.1.1.1.1.3.6.1
1.2.804.2.1.1.1.1.1.3.6.2
1.2.804.2.1.1.1.1.1.3.6.3
1.2.804.2.1.1.1.1.1.3.8.1
1.2.804.2.1.1.1.1.1.3.8.2
1.2.804.2.1.1.1.1.1.3.8.3
1.2.840.113533.7.66.10
1.2.840.113549.1.1.1
1.2.840.113549.1.1.7
1.2.840.113549.1.9.16.3.6
1.2.840.113549.3.2
1.2.840.113549.3.7
1.3.14.3.2.7
1.3.6.1.4.1.11591.13.2.1
1.3.6.1.4.1.11591.13.2.2
1.3.6.1.4.1.11591.13.2.21
1.3.6.1.4.1.11591.13.2.22
1.3.6.1.4.1.11591.13.2.23
1.3.6.1.4.1.11591.13.2.24
1.3.6.1.4.1.11591.13.2.3
1.3.6.1.4.1.11591.13.2.4
1.3.6.1.4.1.11591.13.2.41
1.3.6.1.4.1.11591.13.2.42
1.3.6.1.4.1.11591.13.2.43
1.3.6.1.4.1.11591.13.2.44
1.3.6.1.4.1.188.7.1.1.2
1.3.6.1.4.1.3029.1.1.2
2.16.840.1.101.3.4.1.1
2.16.840.1.101.3.4.1.2
2.16.840.1.101.3.4.1.21
2.16.840.1.101.3.4.1.22
2.16.840.1.101.3.4.1.23
2.16.840.1.101.3.4.1.24
2.16.840.1.101.3.4.1.3
2.16.840.1.101.3.4.1.4
2.16.840.1.101.3.4.1.41
2.16.840.1.101.3.4.1.42
2.16.840.1.101.3.4.1.43
2.16.840.1.101.3.4.1.44
2.5.8.1.1
AES
AESRFC3211WRAP
AESRFC5649WRAP
AESWRAP
AESWRAPPAD
ARC4
ARIA
ARIACCM
ARIAGCM
ARIARFC3211WRAP
ARIAWRAP
ARIAWRAPPAD
BLOWFISH
BROKENPBEWITHMD5ANDDES
BROKENPBEWITHSHA1ANDDES
CAMELLIA
CAMELLIARFC3211WRAP
CAMELLIAWRAP
CAST5
CAST6
CCM
CHACHA
CHACHA20-POLY1305
CHACHA7539
DES
DESEDE
DESEDERFC3211WRAP
DESEDEWRAP
DESRFC3211WRAP
DHIES
DHIESWITHDESEDE-CBC
DHIESwithAES-CBC
DSTU7624
DSTU7624-128
DSTU7624-128KW
DSTU7624-256
DSTU7624-256KW
DSTU7624-512
DSTU7624-512KW
DSTU7624KW
ECIES
ECIESwithAES-CBC
ECIESwithDESEDE-CBC
ECIESwithSHA1
ECIESwithSHA1andAES-CBC
ECIESwithSHA1andDESEDE-CBC
ECIESwithSHA256
ECIESwithSHA256andAES-CBC
ECIESwithSHA256andDESEDE-CBC
ECIESwithSHA384
ECIESwithSHA384andAES-CBC
ECIESwithSHA384andDESEDE-CBC
ECIESwithSHA512
ECIESwithSHA512andAES-CBC
ECIESwithSHA512andDESEDE-CBC
ELGAMAL
ELGAMAL/PKCS1
ETSIKEMWITHSHA256
GCM
GOST28147
GOST3412-2015
GOST3412-2015/CBC
GOST3412-2015/CFB
GOST3412-2015/CFB8
GOST3412-2015/CTR
GOST3412-2015/OFB
Grain128
Grainv1
HC128
HC256
IDEA
IES
IESWITHDESEDE-CBC
IESwithAES-CBC
NOEKEON
OID.1.2.392.200011.61.1.1.1.2
OID.1.2.392.200011.61.1.1.1.3
OID.1.2.392.200011.61.1.1.1.4
OID.1.2.410.200004.1.4
OID.1.2.410.200046.1.1.1
OID.1.2.410.200046.1.1.11
OID.1.2.410.200046.1.1.12
OID.1.2.410.200046.1.1.13
OID.1.2.410.200046.1.1.14
OID.1.2.410.200046.1.1.2
OID.1.2.410.200046.1.1.3
OID.1.2.410.200046.1.1.4
OID.1.2.410.200046.1.1.6
OID.1.2.410.200046.1.1.7
OID.1.2.410.200046.1.1.8
OID.1.2.410.200046.1.1.9
OID.1.2.804.2.1.1.1.1.1.3.1.1
OID.1.2.804.2.1.1.1.1.1.3.1.2
OID.1.2.804.2.1.1.1.1.1.3.1.3
OID.1.2.804.2.1.1.1.1.1.3.2.1
OID.1.2.804.2.1.1.1.1.1.3.2.2
OID.1.2.804.2.1.1.1.1.1.3.2.3
OID.1.2.804.2.1.1.1.1.1.3.3.1
OID.1.2.804.2.1.1.1.1.1.3.3.2
OID.1.2.804.2.1.1.1.1.1.3.3.3
OID.1.2.804.2.1.1.1.1.1.3.5.1
OID.1.2.804.2.1.1.1.1.1.3.5.2
OID.1.2.804.2.1.1.1.1.1.3.5.3
OID.1.2.804.2.1.1.1.1.1.3.6.1
OID.1.2.804.2.1.1.1.1.1.3.6.2
OID.1.2.804.2.1.1.1.1.1.3.6.3
OID.1.2.804.2.1.1.1.1.1.3.8.1
OID.1.2.804.2.1.1.1.1.1.3.8.2
OID.1.2.804.2.1.1.1.1.1.3.8.3
OID.1.2.840.113533.7.66.10
OID.1.2.840.113549.1.1.1
OID.1.2.840.113549.1.1.7
OID.1.2.840.113549.1.9.16.3.6
OID.1.2.840.113549.3.2
OID.1.2.840.113549.3.7
OID.1.3.14.3.2.7
OID.1.3.6.1.4.1.11591.13.2.1
OID.1.3.6.1.4.1.11591.13.2.2
OID.1.3.6.1.4.1.11591.13.2.21
OID.1.3.6.1.4.1.11591.13.2.22
OID.1.3.6.1.4.1.11591.13.2.23
OID.1.3.6.1.4.1.11591.13.2.24
OID.1.3.6.1.4.1.11591.13.2.3
OID.1.3.6.1.4.1.11591.13.2.4
OID.1.3.6.1.4.1.11591.13.2.41
OID.1.3.6.1.4.1.11591.13.2.42
OID.1.3.6.1.4.1.11591.13.2.43
OID.1.3.6.1.4.1.11591.13.2.44
OID.1.3.6.1.4.1.188.7.1.1.2
OID.1.3.6.1.4.1.3029.1.1.2
OID.2.16.840.1.101.3.4.1.1
OID.2.16.840.1.101.3.4.1.2
OID.2.16.840.1.101.3.4.1.21
OID.2.16.840.1.101.3.4.1.22
OID.2.16.840.1.101.3.4.1.23
OID.2.16.840.1.101.3.4.1.24
OID.2.16.840.1.101.3.4.1.3
OID.2.16.840.1.101.3.4.1.4
OID.2.16.840.1.101.3.4.1.41
OID.2.16.840.1.101.3.4.1.42
OID.2.16.840.1.101.3.4.1.43
OID.2.16.840.1.101.3.4.1.44
OID.2.5.8.1.1
OLDPBEWITHSHAANDTWOFISH-CBC
PBEWITHMD2ANDDES
PBEWITHMD5AND128BITAES-CBC-OPENSSL
PBEWITHMD5AND192BITAES-CBC-OPENSSL
PBEWITHMD5AND256BITAES-CBC-OPENSSL
PBEWITHMD5ANDDES
PBEWITHMD5ANDRC2
PBEWITHSHA1ANDDES
PBEWITHSHA1ANDRC2
PBEWITHSHA256AND128BITAES-CBC-BC
PBEWITHSHA256AND192BITAES-CBC-BC
PBEWITHSHA256AND256BITAES-CBC-BC
PBEWITHSHAAND128BITAES-CBC-BC
PBEWITHSHAAND128BITRC2-CBC
PBEWITHSHAAND128BITRC4
PBEWITHSHAAND192BITAES-CBC-BC
PBEWITHSHAAND2-KEYTRIPLEDES-CBC
PBEWITHSHAAND256BITAES-CBC-BC
PBEWITHSHAAND3-KEYTRIPLEDES-CBC
PBEWITHSHAAND40BITRC2-CBC
PBEWITHSHAAND40BITRC4
PBEWITHSHAANDIDEA-CBC
PBEWITHSHAANDTWOFISH-CBC
RC2
RC2WRAP
RC5
RC5-64
RC6
RIJNDAEL
RSA
RSA/1
RSA/2
RSA/ISO9796-1
RSA/OAEP
RSA/PKCS1
RSA/RAW
SALSA20
SEED
SEEDWRAP
SHACAL-2
SKIPJACK
SM2
SM2WITHBLAKE2B
SM2WITHBLAKE2S
SM2WITHMD5
SM2WITHRIPEMD160
SM2WITHSHA1
SM2WITHSHA224
SM2WITHSHA256
SM2WITHSHA384
SM2WITHSHA512
SM2WITHWHIRLPOOL
SM4
Serpent
Shacal2
TEA
Threefish-1024
Threefish-256
Threefish-512
Tnepres
Twofish
VMPC
VMPC-KSA3
XIES
XIESwithAES-CBC
XIESwithSHA1
XIESwithSHA1andAES-CBC
XIESwithSHA256
XIESwithSHA256andAES-CBC
XIESwithSHA384
XIESwithSHA384andAES-CBC
XIESwithSHA512
XIESwithSHA512andAES-CBC
XSALSA20
XTEA
ZUC-128
ZUC-256
KeyAgreement 0.4.0.127.0.7.1.1.5.1.1.1
0.4.0.127.0.7.1.1.5.1.1.2
0.4.0.127.0.7.1.1.5.1.1.3
0.4.0.127.0.7.1.1.5.1.1.4
0.4.0.127.0.7.1.1.5.1.1.5
0.4.0.127.0.7.1.1.5.1.1.6
1.2.840.113549.1.9.16.3.10
1.2.840.113549.1.9.16.3.5
1.3.101.110
1.3.101.111
1.3.132.1.11.0
1.3.132.1.11.1
1.3.132.1.11.2
1.3.132.1.11.3
1.3.132.1.14.0
1.3.132.1.14.1
1.3.132.1.14.2
1.3.132.1.14.3
1.3.132.1.15.0
1.3.132.1.15.1
1.3.132.1.15.2
1.3.132.1.15.3
1.3.133.16.840.63.0.16
1.3.133.16.840.63.0.2
1.3.133.16.840.63.0.3
DH
DHUWITHSHA1CKDF
DHUWITHSHA1KDF
DHUWITHSHA224CKDF
DHUWITHSHA224KDF
DHUWITHSHA256CKDF
DHUWITHSHA256KDF
DHUWITHSHA384CKDF
DHUWITHSHA384KDF
DHUWITHSHA512CKDF
DHUWITHSHA512KDF
DHWITHSHA1KDF
DHWITHSHA224KDF
DHWITHSHA256KDF
DHWITHSHA384KDF
DHWITHSHA512KDF
ECCDH
ECCDHU
ECCDHUWITHSHA1CKDF
ECCDHUWITHSHA1KDF
ECCDHUWITHSHA224CKDF
ECCDHUWITHSHA224KDF
ECCDHUWITHSHA256CKDF
ECCDHUWITHSHA256KDF
ECCDHUWITHSHA384CKDF
ECCDHUWITHSHA384KDF
ECCDHUWITHSHA512CKDF
ECCDHUWITHSHA512KDF
ECCDHWITHSHA1CKDF
ECCDHWITHSHA1KDF
ECCDHWITHSHA224KDF
ECCDHWITHSHA256CKDF
ECCDHWITHSHA256KDF
ECCDHWITHSHA384CKDF
ECCDHWITHSHA384KDF
ECCDHWITHSHA512CKDF
ECCDHWITHSHA512KDF
ECDH
ECDHC
ECDHWITHSHA1KDF
ECDHWITHSHA224KDF
ECDHWITHSHA256KDF
ECDHWITHSHA384KDF
ECDHWITHSHA512KDF
ECGOST3410
ECGOST3410-2012-256
ECGOST3410-2012-512
ECKAEGWITHRIPEMD160KDF
ECKAEGWITHSHA1KDF
ECKAEGWITHSHA224KDF
ECKAEGWITHSHA256KDF
ECKAEGWITHSHA384KDF
ECKAEGWITHSHA512KDF
ECMQV
ECMQVWITHSHA1CKDF
ECMQVWITHSHA1KDF
ECMQVWITHSHA224CKDF
ECMQVWITHSHA224KDF
ECMQVWITHSHA256CKDF
ECMQVWITHSHA256KDF
ECMQVWITHSHA384CKDF
ECMQVWITHSHA384KDF
ECMQVWITHSHA512CKDF
ECMQVWITHSHA512KDF
MQVWITHSHA1CKDF
MQVWITHSHA1KDF
MQVWITHSHA224CKDF
MQVWITHSHA224KDF
MQVWITHSHA256CKDF
MQVWITHSHA256KDF
MQVWITHSHA384CKDF
MQVWITHSHA384KDF
MQVWITHSHA512CKDF
MQVWITHSHA512KDF
OID.0.4.0.127.0.7.1.1.5.1.1.1
OID.0.4.0.127.0.7.1.1.5.1.1.2
OID.0.4.0.127.0.7.1.1.5.1.1.3
OID.0.4.0.127.0.7.1.1.5.1.1.4
OID.0.4.0.127.0.7.1.1.5.1.1.5
OID.0.4.0.127.0.7.1.1.5.1.1.6
OID.1.2.840.113549.1.9.16.3.10
OID.1.2.840.113549.1.9.16.3.5
OID.1.3.101.110
OID.1.3.101.111
OID.1.3.132.1.11.0
OID.1.3.132.1.11.1
OID.1.3.132.1.11.2
OID.1.3.132.1.11.3
OID.1.3.132.1.14.0
OID.1.3.132.1.14.1
OID.1.3.132.1.14.2
OID.1.3.132.1.14.3
OID.1.3.133.16.840.63.0.2
OID.1.3.133.16.840.63.0.3
X25519
X25519UWITHSHA256KDF
X25519WITHSHA256CKDF
X25519WITHSHA256KDF
X25519WITHSHA384CKDF
X25519WITHSHA512CKDF
X448
X448UWITHSHA512KDF
X448WITHSHA256CKDF
X448WITHSHA384CKDF
X448WITHSHA512CKDF
X448WITHSHA512KDF
XDH
KeyFactory 1.3.6.1.4.1.18227.2.1
1.3.6.1.4.1.22554.4.2
2.16.840.1.114027.80.4.1
COMPOSITE
DH
DSA
DSTU4145
EC
ECDH
ECDHC
ECDSA
ECGOST3410
ECGOST3410-2012
ECMQV
ED25519
ED448
EDDSA
ELGAMAL
EXTERNAL
GOST3410
LMS
OID.1.3.6.1.4.1.18227.2.1
OID.1.3.6.1.4.1.22554.4.2
OID.2.16.840.1.114027.80.4.1
RSA
RSASSA-PSS
SPHINCSPLUS
X.509
X25519
X448
XDH
KeyGenerator 1.2.392.200011.61.1.1.1.2
1.2.392.200011.61.1.1.1.3
1.2.392.200011.61.1.1.1.4
1.2.392.200011.61.1.1.3.2
1.2.392.200011.61.1.1.3.3
1.2.392.200011.61.1.1.3.4
1.2.410.200004.1.4
1.2.410.200004.7.1.1.1
1.2.410.200046.1.1.1
1.2.410.200046.1.1.11
1.2.410.200046.1.1.12
1.2.410.200046.1.1.13
1.2.410.200046.1.1.14
1.2.410.200046.1.1.2
1.2.410.200046.1.1.3
1.2.410.200046.1.1.34
1.2.410.200046.1.1.35
1.2.410.200046.1.1.36
1.2.410.200046.1.1.37
1.2.410.200046.1.1.38
1.2.410.200046.1.1.39
1.2.410.200046.1.1.4
1.2.410.200046.1.1.40
1.2.410.200046.1.1.41
1.2.410.200046.1.1.42
1.2.410.200046.1.1.43
1.2.410.200046.1.1.44
1.2.410.200046.1.1.45
1.2.410.200046.1.1.6
1.2.410.200046.1.1.7
1.2.410.200046.1.1.8
1.2.410.200046.1.1.9
1.2.804.2.1.1.1.1.1.3.1.1
1.2.804.2.1.1.1.1.1.3.1.2
1.2.804.2.1.1.1.1.1.3.1.3
1.2.804.2.1.1.1.1.1.3.10.1
1.2.804.2.1.1.1.1.1.3.10.2
1.2.804.2.1.1.1.1.1.3.10.3
1.2.804.2.1.1.1.1.1.3.2.1
1.2.804.2.1.1.1.1.1.3.2.2
1.2.804.2.1.1.1.1.1.3.2.3
1.2.804.2.1.1.1.1.1.3.3.1
1.2.804.2.1.1.1.1.1.3.3.2
1.2.804.2.1.1.1.1.1.3.3.3
1.2.804.2.1.1.1.1.1.3.5.1
1.2.804.2.1.1.1.1.1.3.5.2
1.2.804.2.1.1.1.1.1.3.5.3
1.2.804.2.1.1.1.1.1.3.6.1
1.2.804.2.1.1.1.1.1.3.6.2
1.2.804.2.1.1.1.1.1.3.6.3
1.2.804.2.1.1.1.1.1.3.7.1
1.2.804.2.1.1.1.1.1.3.7.2
1.2.804.2.1.1.1.1.1.3.7.3
1.2.804.2.1.1.1.1.1.3.8.1
1.2.804.2.1.1.1.1.1.3.8.2
1.2.804.2.1.1.1.1.1.3.8.3
1.2.840.113549.3.2
1.2.840.113549.3.7
1.3.6.1.4.1.188.7.1.1.2
2.16.840.1.101.3.4.1.1
2.16.840.1.101.3.4.1.2
2.16.840.1.101.3.4.1.21
2.16.840.1.101.3.4.1.22
2.16.840.1.101.3.4.1.23
2.16.840.1.101.3.4.1.24
2.16.840.1.101.3.4.1.25
2.16.840.1.101.3.4.1.26
2.16.840.1.101.3.4.1.27
2.16.840.1.101.3.4.1.28
2.16.840.1.101.3.4.1.3
2.16.840.1.101.3.4.1.4
2.16.840.1.101.3.4.1.41
2.16.840.1.101.3.4.1.42
2.16.840.1.101.3.4.1.43
2.16.840.1.101.3.4.1.44
2.16.840.1.101.3.4.1.45
2.16.840.1.101.3.4.1.46
2.16.840.1.101.3.4.1.47
2.16.840.1.101.3.4.1.48
2.16.840.1.101.3.4.1.5
2.16.840.1.101.3.4.1.6
2.16.840.1.101.3.4.1.7
2.16.840.1.101.3.4.1.8
2.16.840.1.101.3.4.2
2.16.840.1.101.3.4.22
2.16.840.1.101.3.4.42
AES
AES-GMAC
AESWRAP
AESWRAPPAD
ARC4
ARIA
ARIA-GMAC
BLOWFISH
CAMELLIA
CAMELLIA-GMAC
CAST5
CAST6
CAST6-GMAC
CHACHA
CHACHA7539
DES
DESEDE
DESEDEWRAP
DSTU7624
GOST28147
GOST3412-2015
Grain128
Grainv1
HC128
HC256
HMACDSTU7564-256
HMACDSTU7564-384
HMACDSTU7564-512
HMACGOST3411
HMACGOST3411-2012-256
HMACGOST3411-2012-512
HMACKECCAK224
HMACKECCAK256
HMACKECCAK288
HMACKECCAK384
HMACKECCAK512
HMACMD2
HMACMD4
HMACMD5
HMACRIPEMD128
HMACRIPEMD160
HMACRIPEMD256
HMACRIPEMD320
HMACSHA1
HMACSHA224
HMACSHA256
HMACSHA3-224
HMACSHA3-256
HMACSHA3-384
HMACSHA3-512
HMACSHA384
HMACSHA512
HMACSHA512/224
HMACSHA512/256
HMACSM3
HMACSkein-1024-1024
HMACSkein-1024-384
HMACSkein-1024-512
HMACSkein-256-128
HMACSkein-256-160
HMACSkein-256-224
HMACSkein-256-256
HMACSkein-512-128
HMACSkein-512-160
HMACSkein-512-224
HMACSkein-512-256
HMACSkein-512-384
HMACSkein-512-512
HMACTIGER
HMACWHIRLPOOL
IDEA
KMAC128
KMAC256
NOEKEON
NOEKEON-GMAC
OID.1.2.392.200011.61.1.1.1.2
OID.1.2.392.200011.61.1.1.1.3
OID.1.2.392.200011.61.1.1.1.4
OID.1.2.392.200011.61.1.1.3.2
OID.1.2.392.200011.61.1.1.3.3
OID.1.2.392.200011.61.1.1.3.4
OID.1.2.410.200004.1.4
OID.1.2.410.200004.7.1.1.1
OID.1.2.410.200046.1.1.1
OID.1.2.410.200046.1.1.11
OID.1.2.410.200046.1.1.12
OID.1.2.410.200046.1.1.13
OID.1.2.410.200046.1.1.14
OID.1.2.410.200046.1.1.2
OID.1.2.410.200046.1.1.3
OID.1.2.410.200046.1.1.34
OID.1.2.410.200046.1.1.35
OID.1.2.410.200046.1.1.36
OID.1.2.410.200046.1.1.37
OID.1.2.410.200046.1.1.38
OID.1.2.410.200046.1.1.39
OID.1.2.410.200046.1.1.4
OID.1.2.410.200046.1.1.40
OID.1.2.410.200046.1.1.41
OID.1.2.410.200046.1.1.42
OID.1.2.410.200046.1.1.43
OID.1.2.410.200046.1.1.44
OID.1.2.410.200046.1.1.45
OID.1.2.410.200046.1.1.6
OID.1.2.410.200046.1.1.7
OID.1.2.410.200046.1.1.8
OID.1.2.410.200046.1.1.9
OID.1.2.804.2.1.1.1.1.1.3.1.1
OID.1.2.804.2.1.1.1.1.1.3.1.2
OID.1.2.804.2.1.1.1.1.1.3.1.3
OID.1.2.804.2.1.1.1.1.1.3.10.1
OID.1.2.804.2.1.1.1.1.1.3.10.2
OID.1.2.804.2.1.1.1.1.1.3.10.3
OID.1.2.804.2.1.1.1.1.1.3.2.1
OID.1.2.804.2.1.1.1.1.1.3.2.2
OID.1.2.804.2.1.1.1.1.1.3.2.3
OID.1.2.804.2.1.1.1.1.1.3.3.1
OID.1.2.804.2.1.1.1.1.1.3.3.2
OID.1.2.804.2.1.1.1.1.1.3.3.3
OID.1.2.804.2.1.1.1.1.1.3.5.1
OID.1.2.804.2.1.1.1.1.1.3.5.2
OID.1.2.804.2.1.1.1.1.1.3.5.3
OID.1.2.804.2.1.1.1.1.1.3.6.1
OID.1.2.804.2.1.1.1.1.1.3.6.2
OID.1.2.804.2.1.1.1.1.1.3.6.3
OID.1.2.804.2.1.1.1.1.1.3.7.1
OID.1.2.804.2.1.1.1.1.1.3.7.2
OID.1.2.804.2.1.1.1.1.1.3.7.3
OID.1.2.804.2.1.1.1.1.1.3.8.1
OID.1.2.804.2.1.1.1.1.1.3.8.2
OID.1.2.804.2.1.1.1.1.1.3.8.3
OID.1.3.6.1.4.1.188.7.1.1.2
OID.2.16.840.1.101.3.4.1.1
OID.2.16.840.1.101.3.4.1.2
OID.2.16.840.1.101.3.4.1.21
OID.2.16.840.1.101.3.4.1.22
OID.2.16.840.1.101.3.4.1.23
OID.2.16.840.1.101.3.4.1.24
OID.2.16.840.1.101.3.4.1.25
OID.2.16.840.1.101.3.4.1.26
OID.2.16.840.1.101.3.4.1.27
OID.2.16.840.1.101.3.4.1.28
OID.2.16.840.1.101.3.4.1.3
OID.2.16.840.1.101.3.4.1.4
OID.2.16.840.1.101.3.4.1.41
OID.2.16.840.1.101.3.4.1.42
OID.2.16.840.1.101.3.4.1.43
OID.2.16.840.1.101.3.4.1.44
OID.2.16.840.1.101.3.4.1.45
OID.2.16.840.1.101.3.4.1.46
OID.2.16.840.1.101.3.4.1.47
OID.2.16.840.1.101.3.4.1.48
OID.2.16.840.1.101.3.4.1.5
OID.2.16.840.1.101.3.4.1.6
OID.2.16.840.1.101.3.4.1.7
OID.2.16.840.1.101.3.4.1.8
POLY1305
POLY1305-AES
POLY1305-ARIA
POLY1305-CAMELLIA
POLY1305-CAST6
POLY1305-NOEKEON
POLY1305-RC6
POLY1305-SEED
POLY1305-SERPENT
POLY1305-SM4
POLY1305-Twofish
RC2
RC5
RC5-64
RC6
RC6-GMAC
RIJNDAEL
SALSA20
SEED
SEED-CMAC
SEED-GMAC
SERPENT-GMAC
SHACAL-2
SIPHASH
SIPHASH128
SKIPJACK
SM4
SM4-CMAC
SM4-GMAC
Serpent
Shacal2
Skein-MAC-1024-1024
Skein-MAC-1024-384
Skein-MAC-1024-512
Skein-MAC-256-128
Skein-MAC-256-160
Skein-MAC-256-224
Skein-MAC-256-256
Skein-MAC-512-128
Skein-MAC-512-160
Skein-MAC-512-224
Skein-MAC-512-256
Skein-MAC-512-384
Skein-MAC-512-512
TEA
TNEPRES-GMAC
Threefish-1024
Threefish-256
Threefish-512
Tnepres
Twofish
Twofish-GMAC
VMPC
VMPC-KSA3
XSALSA20
XTEA
ZUC-128
ZUC-256
KeyPairGenerator DH
DSA
DSTU4145
EC
ECDH
ECDHC
ECDHWITHSHA1KDF
ECDSA
ECGOST3410
ECGOST3410-2012
ECIES
ECMQV
ED25519
ED448
EDDSA
ELGAMAL
GOST3410
LMS
OID.1.3.101.110
OID.1.3.101.111
OID.1.3.101.112
OID.1.3.101.113
RSA
RSASSA-PSS
SPHINCSPLUS
X25519
X448
XDH
KeyStore BCFKS
BCFKS-DEF
BCPKCS12
BKS
BouncyCastle
FIPS
FIPS-DEF
IBCFKS
IBCFKS-DEF
IFIPS
IFIPS-DEF
PKCS12
PKCS12-3DES-3DES
PKCS12-3DES-40RC2
PKCS12-DEF
PKCS12-DEF-3DES-3DES
PKCS12-DEF-3DES-40RC2
Mac AES-GMAC
AESCCMMAC
AESCMAC
ARIA-GMAC
BLOWFISHCMAC
CAMELLIA-GMAC
CAST6-GMAC
DESCMAC
DESEDECMAC
DESEDEMAC
DESEDEMAC/CFB8
DESEDEMAC64
DESEDEMAC64WITHISO7816-4PADDING
DESMAC
DESMAC/CFB8
DESMAC64
DESMAC64WITHISO7816-4PADDING
DESWITHISO9797
DSTU7624-128GMAC
DSTU7624-256GMAC
DSTU7624-512GMAC
DSTU7624GMAC
GOST28147MAC
GOST3412MAC
HMACDSTU7564-256
HMACDSTU7564-384
HMACDSTU7564-512
HMACGOST3411
HMACGOST3411-2012-256
HMACGOST3411-2012-512
HMACKECCAK224
HMACKECCAK256
HMACKECCAK288
HMACKECCAK384
HMACKECCAK512
HMACMD2
HMACMD4
HMACMD5
HMACRIPEMD128
HMACRIPEMD160
HMACRIPEMD256
HMACRIPEMD320
HMACSHA1
HMACSHA224
HMACSHA256
HMACSHA3-224
HMACSHA3-256
HMACSHA3-384
HMACSHA3-512
HMACSHA384
HMACSHA512
HMACSHA512/224
HMACSHA512/256
HMACSM3
HMACSkein-1024-1024
HMACSkein-1024-384
HMACSkein-1024-512
HMACSkein-256-128
HMACSkein-256-160
HMACSkein-256-224
HMACSkein-256-256
HMACSkein-512-128
HMACSkein-512-160
HMACSkein-512-224
HMACSkein-512-256
HMACSkein-512-384
HMACSkein-512-512
HMACTIGER
HMACWHIRLPOOL
IDEAMAC
IDEAMAC/CFB8
ISO9797ALG3MAC
ISO9797ALG3WITHISO7816-4PADDING
KMAC128
KMAC256
NOEKEON-GMAC
OLDHMACSHA384
OLDHMACSHA512
PBEWITHHMACRIPEMD160
PBEWITHHMACSHA
PBEWITHHMACSHA1
PBEWITHHMACSHA224
PBEWITHHMACSHA256
PBEWITHHMACSHA384
PBEWITHHMACSHA512
POLY1305
POLY1305-AES
POLY1305-ARIA
POLY1305-CAMELLIA
POLY1305-CAST6
POLY1305-NOEKEON
POLY1305-RC6
POLY1305-SEED
POLY1305-SERPENT
POLY1305-SM4
POLY1305-Twofish
RC2MAC
RC2MAC/CFB8
RC5MAC
RC5MAC/CFB8
RC6-GMAC
SEED-CMAC
SEED-GMAC
SERPENT-GMAC
SIPHASH-2-4
SIPHASH-4-8
SIPHASH128-2-4
SIPHASH128-4-8
SKIPJACKMAC
SKIPJACKMAC/CFB8
SM4-CMAC
SM4-GMAC
Shacal-2CMAC
Skein-MAC-1024-1024
Skein-MAC-1024-384
Skein-MAC-1024-512
Skein-MAC-256-128
Skein-MAC-256-160
Skein-MAC-256-224
Skein-MAC-256-256
Skein-MAC-512-128
Skein-MAC-512-160
Skein-MAC-512-224
Skein-MAC-512-256
Skein-MAC-512-384
Skein-MAC-512-512
TNEPRES-GMAC
Threefish-1024CMAC
Threefish-256CMAC
Threefish-512CMAC
Twofish-GMAC
VMPCMAC
ZUC-128
ZUC-256
ZUC-256-32
ZUC-256-64
MessageDigest 1.0.10118.3.0.55
1.2.804.2.1.1.1.1.2.2.1
1.2.804.2.1.1.1.1.2.2.2
1.2.804.2.1.1.1.1.2.2.3
2.16.840.1.101.3.4.2.10
2.16.840.1.101.3.4.2.11
2.16.840.1.101.3.4.2.12
2.16.840.1.101.3.4.2.7
2.16.840.1.101.3.4.2.8
2.16.840.1.101.3.4.2.9
BLAKE2B-160
BLAKE2B-256
BLAKE2B-384
BLAKE2B-512
BLAKE2S-128
BLAKE2S-160
BLAKE2S-224
BLAKE2S-256
BLAKE3-256
DSTU7564-256
DSTU7564-384
DSTU7564-512
GOST3411
GOST3411-2012-256
GOST3411-2012-512
HARAKA-256
HARAKA-512
KECCAK-224
KECCAK-256
KECCAK-288
KECCAK-384
KECCAK-512
MD2
MD4
MD5
OID.1.0.10118.3.0.55
OID.1.2.804.2.1.1.1.1.2.2.1
OID.1.2.804.2.1.1.1.1.2.2.2
OID.1.2.804.2.1.1.1.1.2.2.3
OID.2.16.840.1.101.3.4.2.10
OID.2.16.840.1.101.3.4.2.11
OID.2.16.840.1.101.3.4.2.12
OID.2.16.840.1.101.3.4.2.7
OID.2.16.840.1.101.3.4.2.8
OID.2.16.840.1.101.3.4.2.9
PARALLELHASH128-256
PARALLELHASH256-512
RIPEMD128
RIPEMD160
RIPEMD256
RIPEMD320
SHA-1
SHA-224
SHA-256
SHA-384
SHA-512
SHA-512/224
SHA-512/256
SHA3-224
SHA3-256
SHA3-384
SHA3-512
SHAKE128-256
SHAKE256-512
SM3
Skein-1024-1024
Skein-1024-384
Skein-1024-512
Skein-256-128
Skein-256-160
Skein-256-224
Skein-256-256
Skein-512-128
Skein-512-160
Skein-512-224
Skein-512-256
Skein-512-384
Skein-512-512
TIGER
TUPLEHASH128-256
TUPLEHASH256-512
WHIRLPOOL
SecretKeyFactory 1.3.14.3.2.17
1.3.6.1.4.1.11591.4.11
2.16.840.1.101.3.4.1
AES
ARIA
CAMELLIA
DES
DESEDE
OID.1.3.14.3.2.17
OID.1.3.6.1.4.1.11591.4.11
OID.2.16.840.1.101.3.4.1
PBEWITHHMACGOST3411
PBEWITHHMACRIPEMD160
PBEWITHHMACSHA1
PBEWITHHMACSHA256
PBEWITHHMACTIGER
PBEWITHMD2ANDDES
PBEWITHMD2ANDRC2
PBEWITHMD5AND128BITAES-CBC-OPENSSL
PBEWITHMD5AND192BITAES-CBC-OPENSSL
PBEWITHMD5AND256BITAES-CBC-OPENSSL
PBEWITHMD5ANDDES
PBEWITHMD5ANDRC2
PBEWITHSHA1ANDDES
PBEWITHSHA1ANDRC2
PBEWITHSHA256AND128BITAES-CBC-BC
PBEWITHSHA256AND192BITAES-CBC-BC
PBEWITHSHA256AND256BITAES-CBC-BC
PBEWITHSHAAND128BITAES-CBC-BC
PBEWITHSHAAND128BITRC2-CBC
PBEWITHSHAAND128BITRC4
PBEWITHSHAAND192BITAES-CBC-BC
PBEWITHSHAAND2-KEYTRIPLEDES-CBC
PBEWITHSHAAND256BITAES-CBC-BC
PBEWITHSHAAND3-KEYTRIPLEDES-CBC
PBEWITHSHAAND40BITRC2-CBC
PBEWITHSHAAND40BITRC4
PBEWITHSHAANDIDEA-CBC
PBEWITHSHAANDTWOFISH-CBC
PBKDF-OPENSSL
PBKDF2
PBKDF2WITHASCII
PBKDF2WITHHMACGOST3411
PBKDF2WITHHMACSHA224
PBKDF2WITHHMACSHA256
PBKDF2WITHHMACSHA3-224
PBKDF2WITHHMACSHA3-256
PBKDF2WITHHMACSHA3-384
PBKDF2WITHHMACSHA3-512
PBKDF2WITHHMACSHA384
PBKDF2WITHHMACSHA512
PBKDF2WITHHMACSM3
SCRYPT
SEED
TLS10KDF
TLS11KDF
TLS12WITHSHA256KDF
TLS12WITHSHA384KDF
TLS12WITHSHA512KDF
SecureRandom DEFAULT
NONCEANDIV
Signature 1.3.6.1.5.5.7.6.30
1.3.6.1.5.5.7.6.31
DDSA
DETDSA
DSA
DSTU4145
ECDDSA
ECDSA
ECGOST3410
ECGOST3410-2012-256
ECGOST3410-2012-512
ED25519
ED448
EDDSA
GOST3410
GOST3411-2012-256WITHECGOST3410-2012-256
GOST3411-2012-512WITHECGOST3410-2012-512
GOST3411WITHDSTU4145
GOST3411WITHDSTU4145LE
GOST3411WITHECGOST3410
LMS
MD2WITHRSA
MD4WITHRSA
MD5WITHRSA
MD5WITHRSA/ISO9796-2
NONEWITHDSA
NONEwithECDSA
OID.1.3.6.1.5.5.7.6.30
OID.1.3.6.1.5.5.7.6.31
RAWRSASSA-PSS
RIPEMD128WITHRSA
RIPEMD128WITHRSA/X9.31
RIPEMD160WITHDSA
RIPEMD160WITHECDSA
RIPEMD160WITHPLAIN-ECDSA
RIPEMD160WITHRSA
RIPEMD160WITHRSA/X9.31
RIPEMD160withRSA/ISO9796-2
RIPEMD256WITHRSA
RMD128WITHRSA
RMD128WITHRSA/X9.31
RMD160WITHRSA
RMD160WITHRSA/X9.31
RMD256WITHRSA
RSA
RSASSA-PSS
SHA1WITHCVC-ECDSA
SHA1WITHDDSA
SHA1WITHDETDSA
SHA1WITHECDDSA
SHA1WITHECNR
SHA1WITHPLAIN-ECDSA
SHA1WITHRSA
SHA1WITHRSA/ISO9796-2
SHA1WITHRSA/X9.31
SHA1WITHRSAANDMGF1
SHA1WITHRSAANDSHAKE128
SHA1WITHRSAANDSHAKE256
SHA224WITHCVC-ECDSA
SHA224WITHDDSA
SHA224WITHDETDSA
SHA224WITHDSA
SHA224WITHECDDSA
SHA224WITHECDSA
SHA224WITHECNR
SHA224WITHPLAIN-ECDSA
SHA224WITHRSA
SHA224WITHRSA/ISO9796-2
SHA224WITHRSA/X9.31
SHA224WITHRSAANDMGF1
SHA224WITHRSAANDSHAKE128
SHA224WITHRSAANDSHAKE256
SHA256WITHCVC-ECDSA
SHA256WITHDDSA
SHA256WITHDETDSA
SHA256WITHDSA
SHA256WITHECDDSA
SHA256WITHECDSA
SHA256WITHECNR
SHA256WITHPLAIN-ECDSA
SHA256WITHRSA
SHA256WITHRSA/ISO9796-2
SHA256WITHRSA/X9.31
SHA256WITHRSAANDMGF1
SHA256WITHRSAANDSHAKE128
SHA256WITHRSAANDSHAKE256
SHA256WITHSM2
SHA3-224WITHDDSA
SHA3-224WITHDSA
SHA3-224WITHECDDSA
SHA3-224WITHECDSA
SHA3-224WITHPLAIN-ECDSA
SHA3-224WITHRSA
SHA3-224WITHRSAANDMGF1
SHA3-224WITHRSAANDSHAKE128
SHA3-224WITHRSAANDSHAKE256
SHA3-256WITHDDSA
SHA3-256WITHDSA
SHA3-256WITHECDDSA
SHA3-256WITHECDSA
SHA3-256WITHPLAIN-ECDSA
SHA3-256WITHRSA
SHA3-256WITHRSAANDMGF1
SHA3-256WITHRSAANDSHAKE128
SHA3-256WITHRSAANDSHAKE256
SHA3-384WITHDDSA
SHA3-384WITHDSA
SHA3-384WITHECDDSA
SHA3-384WITHECDSA
SHA3-384WITHPLAIN-ECDSA
SHA3-384WITHRSA
SHA3-384WITHRSAANDMGF1
SHA3-384WITHRSAANDSHAKE128
SHA3-384WITHRSAANDSHAKE256
SHA3-512WITHDDSA
SHA3-512WITHDSA
SHA3-512WITHECDDSA
SHA3-512WITHECDSA
SHA3-512WITHPLAIN-ECDSA
SHA3-512WITHRSA
SHA3-512WITHRSAANDMGF1
SHA3-512WITHRSAANDSHAKE128
SHA3-512WITHRSAANDSHAKE256
SHA384WITHCVC-ECDSA
SHA384WITHDDSA
SHA384WITHDETDSA
SHA384WITHDSA
SHA384WITHECDDSA
SHA384WITHECDSA
SHA384WITHECNR
SHA384WITHPLAIN-ECDSA
SHA384WITHRSA
SHA384WITHRSA/ISO9796-2
SHA384WITHRSA/X9.31
SHA384WITHRSAANDMGF1
SHA384WITHRSAANDSHAKE128
SHA384WITHRSAANDSHAKE256
SHA512(224)WITHRSA
SHA512(224)WITHRSA/ISO9796-2
SHA512(224)WITHRSA/X9.31
SHA512(224)WITHRSAANDMGF1
SHA512(224)WITHRSAANDSHAKE128
SHA512(224)WITHRSAANDSHAKE256
SHA512(256)WITHRSA
SHA512(256)WITHRSA/ISO9796-2
SHA512(256)WITHRSA/X9.31
SHA512(256)WITHRSAANDMGF1
SHA512(256)WITHRSAANDSHAKE128
SHA512(256)WITHRSAANDSHAKE256
SHA512WITHCVC-ECDSA
SHA512WITHDDSA
SHA512WITHDETDSA
SHA512WITHDSA
SHA512WITHECDDSA
SHA512WITHECDSA
SHA512WITHECNR
SHA512WITHPLAIN-ECDSA
SHA512WITHRSA
SHA512WITHRSA/ISO9796-2
SHA512WITHRSA/X9.31
SHA512WITHRSAANDMGF1
SHA512WITHRSAANDSHAKE128
SHA512WITHRSAANDSHAKE256
SHAKE128WITHECDSA
SHAKE128WITHRSAPSS
SHAKE256WITHECDSA
SHAKE256WITHRSAPSS
SM3WITHSM2
SPHINCSPLUS
WhirlpoolWITHRSA/ISO9796-2
WhirlpoolWITHRSA/X9.31
X509Store ATTRIBUTECERTIFICATE/COLLECTION
ATTRIBUTECERTIFICATE/LDAP
CERTIFICATE/COLLECTION
CERTIFICATE/LDAP
CERTIFICATEPAIR/COLLECTION
CERTIFICATEPAIR/LDAP
CRL/COLLECTION
CRL/LDAP
X509StreamParser ATTRIBUTECERTIFICATE
CERTIFICATE
CERTIFICATEPAIR
CRL

4 Engine类和算法

引擎类为特定类型的密码服务提供接口,而不依赖于特定的密码算法或提供者。 引擎需要提供如下功能:

  • 加密,数字签名,消息摘要等
  • 密钥和算法参数
  • 密钥库或证书
引擎类 功能
SecureRandom 用于生成随机或伪随机数字。
MessageDigest 用于计算指定数据的消息摘要(散列)。
Signature 使用密钥初始化,这些签名用于签署数据并验证数字签
Cipher 用密钥初始化,用于加密/解密数据。存在各种类型的算法
Message Authentication Codes(MAC) 与MessageDigests一样,它们也会生成散列值,但是首先使用密钥初始化以保护消息的完整性。
KeyFactory 用于将Key类型的现有不透明密钥转换为密钥规范(底层密钥材料的透明表示),反之亦然。
SecretKeyFactory 用于将SecretKey类型的现有不透明加密密钥转换为密钥规范(底层密钥材料的透明表示),反之亦然。 SecretKeyFactorys是专门的KeyFactorys,只能创建密钥(对称)。
KeyPairGenerator 用于生成一对适用于指定算法的公钥和私钥。
KeyGenerator 用于生成与指定算法一起使用的新密钥。
KeyAgreement 由两方或多方使用,商定和建立一个特定的密钥,用于特定的密码操作。
AlgorithmParameters 用于存储特定算法的参数,包括参数编码和解码。
AlgorithmParameterGenerator 用于生成适合于指定算法的一组AlgorithmParameters。
KeyStore 用于创建和管理密钥库。密钥库是密钥的数据库。密钥库中的私钥具有与其关联的证书链,用于验证相应的公钥。密钥库还包含来自可信实体的证书。
CertificateFactory 用于创建公钥证书和证书吊销列表(CRL)。
CertPathBuilder 用于构建证书链(也称为证书路径)。
CertPathValidator 用于验证证书链。
CertStore 用于从存储库中检索证书和CRL。

4.1 引擎类的使用示例-AES加密解密

下面是一个简单的基于引擎类的AES加解密的实现:

/*** @param data 明文* @param key  密钥,长度16* @param iv   偏移量,长度16* @return 密文* @Description AES算法加密明文*/public static String AesEncrypt(String data, String key, String iv) {try {//AES/CBC/NoPaddingCipher cipher = Cipher.getInstance(“AES/CBC/NoPadding”);int blockSize = cipher.getBlockSize();byte[] dataBytes = data.getBytes();int plaintextLength = dataBytes.length;if (plaintextLength % blockSize != 0) {plaintextLength = plaintextLength + (blockSize - (plaintextLength % blockSize));}byte[] plaintext = new byte[plaintextLength];System.arraycopy(dataBytes, 0, plaintext, 0, dataBytes.length);SecretKeySpec keyspec = new SecretKeySpec(key.getBytes(), "AES");// CBC模式,需要一个向量iv,可增加加密算法的强度IvParameterSpec ivspec = new IvParameterSpec(iv.getBytes());  cipher.init(Cipher.ENCRYPT_MODE, keyspec, ivspec);byte[] encrypted = cipher.doFinal(plaintext);// 加密后直接转string可能乱码,用BASE64做转码。return encode(encrypted).trim(); } catch (Exception e) {e.printStackTrace();return null;}}/*** @param data 密文* @param key  密钥,长度16* @param iv   偏移量,长度16* @return 明文* @Description AES算法解密*/public static String AesDecrypt(String data, String key, String iv) {try {//先用base64解密byte[] encrypted1 = decode(data);//AES/CBC/NoPadding Cipher cipher = Cipher.getInstance(“AES/CBC/NoPadding”);SecretKeySpec keyspec = new SecretKeySpec(key.getBytes(), "AES");IvParameterSpec ivspec = new IvParameterSpec(iv.getBytes());cipher.init(Cipher.DECRYPT_MODE, keyspec, ivspec);byte[] original = cipher.doFinal(encrypted1);String originalString = new String(original);return originalString.trim();} catch (Exception e) {e.printStackTrace();return null;}}/*** 编码** @param byteArray* @return*/public static String encode(byte[] byteArray) {return new String(new org.apache.commons.codec.binary.Base64().encode(byteArray));}/*** 解码** @param base64EncodedString* @return*/public static byte[] decode(String base64EncodedString) {return new org.apache.commons.codec.binary.Base64().decode(base64EncodedString);}

Base64编解码需要添加Pom依赖:

     <!--常用的加密解密方法--><dependency><groupId>commons-codec</groupId><artifactId>commons-codec</artifactId><version>1.15</version></dependency>

4.2 引擎类支持的算法列表

算法
AlgorithmParameterGenerator DiffieHellman (1024)
DSA (1024)
AlgorithmParameters AES
DES
DESede
DiffieHellman
DSA
CertificateFactory
CertPath
CertPathBuilder PKIX
CertPathValidator PKIX
CertStore
Cipher AES/CBC/NoPadding (128)
AES/CBC/PKCS5Padding (128)
AES/ECB/NoPadding (128)
AES/ECB/PKCS5Padding (128)
DES/CBC/NoPadding (56)
DES/CBC/PKCS5Padding (56)
DES/ECB/NoPadding (56)
DES/ECB/PKCS5Padding (56)
DESede/CBC/NoPadding (168)
DESede/CBC/PKCS5Padding (168)
DESede/ECB/NoPadding (168)
DESede/ECB/PKCS5Padding (168)
RSA/ECB/PKCS1Padding (1024, 2048)
RSA/ECB/OAEPWithSHA-1AndMGF1Padding (1024, 2048)
RSA/ECB/OAEPWithSHA-256AndMGF1Padding (1024, 2048)
KeyAgreement DiffieHellman
ECDH
ECMQV
KeyFactory DiffieHellman
DSA
RSA
KeyGenerator AES (128)
DES (56)
DESede (168)
HmacSHA1
HmacSHA256
KeyPairGenerator DiffieHellman (1024)
DSA (1024)
RSA (1024, 2048)
KeyStore
Mac HmacMD5
HmacSHA1
HmacSHA256
MessageDigest MD5
SHA-1
SHA-256
SecretKeyFactory DES
DESede
SecureRandom NativePRNG
NativePRNGBlocking
NativePRNGNonBlocking
PKCS11
SHA1PRNG
Windows-PRNG
Signature SHA1withDSA
SHA1withRSA
SHA256withRSA
SSLContext TLSv1

Java加解密(一)概述相关推荐

  1. 60分钟搞定JAVA加解密

    从摩尔电码到小伙伴之间老师来了的暗号,加密信息无处不在.从军事到生活,加密信息的必要性也不言而喻. 今天,我们就来看看java怎么对数据进行加解密 分类 a.古典密码 -- 受限制算法:算法的保密性给 ...

  2. Java加解密的艺术书摘

    Java加解密的艺术 密码学常用术语 明文(Plaintext):指待加密信息.明文可以是文本文件.图片文件.二进制数据等. 密文(Ciphertext):指经过加密后的明文.密文通常以文本.二进制数 ...

  3. erlang java 加解密(2)消息摘要算法(MD、SHA、MAC)之SHA

    java加解密相关资料和代码参考<java加密与解密的艺>http://snowolf.iteye.com/blog/379860 sha(Data) -> Digest Types ...

  4. Base64 混淆加密+迭代次数,Base64前后端加解密不一致、Base64 js加解密结果与java加解密结果不一致,Base64中文加密乱码

    Table of Contents 概述 一.js加密,java解密 1.js加密 1.中文字符串加密 2.英文等字符串加密 3.中文字符串混淆.迭代加密 4.英文等字符串混淆.迭代加密 5.JSON ...

  5. java 3des解密过程_6. Java 加解密技术系列之 3DES

    importjavax.crypto.Cipher;importjavax.crypto.SecretKey;importjavax.crypto.spec.SecretKeySpec;importj ...

  6. angular和JAVA实现aes、rsa加密解密,前后端交互,前端加解密和后端JAVA加解密实现

    今天实现了下AES和RSA加密解密,主要的功能是对前后端交互数据进行加密解密,为什么要用到两个算法呢,首先RSA默认的话加密长度是有限的100多个byte吧大约,并且需要公钥私钥,而AES加密没有限制 ...

  7. 【Java加解密系列】- SM2生成密钥

    国密算法是国家密码局制定标准的一系列算法,包括SM1.SM2.SM3.SM4等.其中,SM1是采用硬件实现的,不予讨论:SM2是非对称加密算法:SM3是摘要算法:SM4是对称加密算法.本系列博客将讲解 ...

  8. [JAVA加解密]RSA算法、ElGamal算法

    一.RSA算法: 1.简介:RSA公钥加密算法是1977年由罗纳德·李维斯特(Ron Rivest).阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的. ...

  9. java代码生成密钥库_【Java加解密系列】- SM2生成密钥

    国密算法是国家密码局制定标准的一系列算法,包括SM1.SM2.SM3.SM4等.其中,SM1是采用硬件实现的,不予讨论:SM2是非对称加密算法:SM3是摘要算法:SM4是对称加密算法.本系列文章将讲解 ...

  10. Java 加解密技术之 MD5

    序 上一篇文章中,介绍了最基础的编码方式 - - BASE64,也简单的提了一下编码的原理.这篇文章继续加解密的系列,当然也是介绍比较基础的加密方式 - - MD5,MD5 属于单向加密算法,是不可逆 ...

最新文章

  1. vrrp的组播地址是多少
  2. 学习结构[记录]类型(8) - 结构嵌套
  3. excel单元格下拉菜单
  4. RocketMq : 消费消息的两种方式 pull 和 push
  5. 软件界面是怎么做出来的_电脑时间管理软件,每天要做的事情会有对话框跳出来提醒的便签软件...
  6. php图片文字垂直对齐,记一次解决字体图标垂直对齐问题的过程
  7. 3月第一周中国五大顶级域名增6万 美国增1.8万
  8. 获取目录-Winform
  9. 数字化定量分析_数字化定量分析
  10. 计算机所建造全过程,Midas 桥梁设计建模计算,全过程图文解析!
  11. python输入多个数用逗号隔开、计算平均值_python实现输入五个数并求平均值
  12. VsCode新建VueJs项目
  13. 坠落的蚂蚁【思维/模拟】
  14. Warning: preg_match(): Compilation failed: PCRE does not support
  15. 计算机基础 CMOS
  16. Error: @vitejs/plugin-vue requires vue (>=3.2.13) or @vue/compiler-sfc to be present in the dependen
  17. Python基于Django图书借阅管理系统
  18. 天载股票资讯白酒等抱团股反攻
  19. OpenSSL API
  20. Cocos Creator 从下载图片到手机本地相册

热门文章

  1. 电气器件系列十六:热电偶、热电阻
  2. 今天学习腌菜,啦啦啦啦啦
  3. 图应用:骑士周游问题
  4. BI是什么?应用BI工具能给企业带来哪些帮助?
  5. CrossAir CA-S01 SMD贴片天线使用步骤
  6. 蓝队在攻防比赛中常用的防护手段汇总
  7. php三D立体模拟,【HTML5】3D模型--百行代码实现旋转立体魔方实例
  8. C#实现简单点餐系统
  9. 三基色配色表java_【调色】颜色配色表 适合重彩搭配用
  10. c语言输出宽度右对齐,输出宽度设置