码迷,mamicode.com
首页 > 编程语言 > 详细

Java加密解密(一)Java加密体系基础

时间:2015-06-09 12:03:37      阅读:3428      评论:0      收藏:0      [点我收藏+]

标签:

Java加密解密(一)Java加密体系基础

1. JCA(Java Cryptography Architecture)

提供基本的加密框架,如证书,数字签名,消息摘要和密钥对生成器。其主要实现在java.security包中。

2. JCE(Java Cryptography Extension)

在JCA的基础了作了扩展,提供了各种加密算法、消息摘要算法和密钥管理等功能。JDK提供的JCE实现主要在javax.crypto包中。
第三方提供的JCE也称为安全提供者。由于出口限制,可能需要一个或多个安全提供者,Bouncy Castle是一个轻量级的开源免费的安全提供者

3. 安全提供者

实现了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.SunPCSC

3.1 添加安全提供者的两种方式:

1) 在java.security文件中添加
security.provier.<N>=<Provider className>
其中N越小其优先级越高,1为最大优先级
2) 使用Security类
Security.addProvider与Security.insertProviderAt方法添加或插入Provider。
Security.addProvider(new BouncyCastleProvider());

方法1)将安全提供者添加到了jre环境下,但可移植性不强,如果换个环境需要再次配置java.security文件。
方法2)通过代码显式添加了安全提供者,使程序的运行不受运行环境限制

3.2 安全提供者的属性

Provider类继承了Properties类,所以可以使用相关方法取得Provider的属性


//查看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如下:

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,

Java加密解密(一)Java加密体系基础

标签:

原文地址:http://my.oschina.net/wisedream/blog/464532

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!