提供基本的加密框架,如證書,數字簽名,消息摘要和密鑰對生成器。其主要實如今java.security包中。java
在JCA的基礎了做了擴展,提供了各類加密算法、消息摘要算法和密鑰管理等功能。JDK提供的JCE實現主要在javax.crypto包中。 第三方提供的JCE也稱爲安全提供者。因爲出口限制,可能須要一個或多個安全提供者,Bouncy Castle是一個輕量級的開源免費的安全提供者算法
實現了java安全性的一部分或所有,它是繼承自java.security.Provider的子類。 jre/lib/security/java.security文件記錄了jre環境中的安全提供者安全
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.SunPCSCapp
在java.security文件中添加 security.provier.<N>=<Provider className>
其中N越小其優先級越高,1爲最大優先級框架
使用Security類 Security.addProvider與Security.insertProviderAt方法添加或插入Provider。 Security.addProvider(new BouncyCastleProvider());
dom
方法1)將安全提供者添加到了jre環境下,但可移植性不強,若是換個環境須要再次配置java.security文件。 方法2)經過代碼顯式添加了安全提供者,使程序的運行不受運行環境限制ide
Provider類繼承了Properties類,因此能夠使用相關方法取得Provider的屬性ui
//查看Provider提供的屬性 Provider provider = new BouncyCastleProvider(); for(Map.Entry entry : provider.entrySet()) System.out.println(entry.getKey()+": "+entry.getValue());
這些屬性的鍵定義了算法名稱,值爲相應算法的實現類或算法別名。 Provider內部類Service封裝了這些屬性,並提供了一個工廠方法得到對應的Service實例 public synchronized Service getService(String type, String algorithm)
經過以下方法能夠查看Provider提供的Service類型及其算法加密
Map<String, StringBuilder> typeAlg = new HashMap<String, StringBuilder>(); for (Provider.Service service : provider.getServices()) { if (!typeAlg.containsKey(service.getType())) typeAlg.put(service.getType(), new StringBuilder()); typeAlg.get(service.getType()).append(service.getAlgorithm()).append(","); } for(Map.Entry entry:typeAlg.entrySet()) System.out.println(entry.getKey()+": "+entry.getValue());
BouncyCastle提供的部分Service type與algrithm以下:.net
Type | Algrithm |
---|---|
MessageDigest | SHA-1,SHA-224,SHA-256,SHA-384,SHA-512,MD2,MD4,MD5 |
Cipher | AESRFC3211WRAP,AESWRAP,AES,BLOWFISH,RSA,RSA/RAW,RSA/PKCS1 |
Signature | SHA256WITHCVC-ECDSA,ECDSA,RIPEMD160WITHECDSA,SHA224WITHECNR,SHA224WITHCVC-ECDSA,SHA256WITHECNR,SHA224WITHECDSA,SHA384WITHECNR,SHA256WITHECDSA,SHA1WITHCVC-ECDSA,SHA384WITHECDSA,SHA512WITHECDSA,SHA1WITHECNR,SHA512WITHECNR,NONEwithECDSA,MD2WithRSAEncryption,MD4WithRSAEncryption,MD5WithRSAEncryption,SHA1WithRSAEncryption,SHA224WithRSAEncryption,SHA256WithRSAEncryption,SHA384WithRSAEncryption,SHA512WithRSAEncryption,RIPEMD160WithRSAEncryption,RIPEMD128WithRSAEncryption,RIPEMD256WithRSAEncryption,DSA,NONEWITHDSA,SHA1withRSA/ISO9796-2,MD5withRSA/ISO9796-2,RIPEMD160withRSA/ISO9796-2,RSASSA-PSS,1.2.840.113549.1.1.10,SHA1withRSA/PSS,SHA224withRSA/PSS,SHA256withRSA/PSS,SHA384withRSA/PSS,SHA512withRSA/PSS,RSA,RAWRSASSA-PSS,SHA224WITHDSA,SHA256WITHDSA,SHA384WITHDSA,SHA512WITHDSA |
KeyAgreement | ECDH,ECDHC,ECMQV,DH, |