文档章节

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

pseudo
 pseudo
发布于 2015/06/09 11:15
字数 647
阅读 326
收藏 16

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如下:

TypeAlgrithm
MessageDigestSHA-1,SHA-224,SHA-256,SHA-384,SHA-512,MD2,MD4,MD5
CipherAESRFC3211WRAP,AESWRAP,AES,BLOWFISH,RSA,RSA/RAW,RSA/PKCS1
SignatureSHA256WITHCVC-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
KeyAgreementECDH,ECDHC,ECMQV,DH,

© 著作权归作者所有

共有 人打赏支持
pseudo

pseudo

粉丝 79
博文 37
码字总数 35469
作品 3
朝阳
程序员
加载中

评论(1)

西夏一品堂
西夏一品堂
数字签名和加密解密有什么区别
基于ClassLoader的java代码加密的经验分享

原理就是 生成项目时将待加密的java class文件通过加密算法转换生成加密的二进制文件,此文件不会被JD-GUI等反编译工具直接解密。 项目在启动时,用自定义的ClassLoader将加密的二进制文件进...

hxt168
06/06
0
0
Java加密技术(一)——BASE64与单向加密算法MD5&SHA&MAC

加密解密,曾经是我一个毕业设计的重要组件。在工作了多年以后回想当时那个加密、解密算法,实在是太单纯了。 言归正传,这里我们主要描述Java已经实现的一些加密解密算法,最后介绍数字证书...

mrliuze
2015/05/27
0
0
android 3des加密Could not instantiate bean class ...

com.sun.crypto.provider.SunJCE Could not instantiate bean class [com.lz.monitor.alert.service.ServiceImp]: Constructor threw exception; nested exception is java.lang.NoClassDefF......

大凉龙雀
2012/07/24
0
0
关于AES256算法java端加密,ios端解密出现无法解密问题的解决方案

我想关于AES算法大家应该都已经了解了,我就不多介绍了。这是本人第一次写技术博文,如果有不对之处欢迎大家指正,共同讨论,一起学习! 之前在项目上用到AES256加密解密算法,刚开始在java端...

Sun1009
2012/12/13
0
32
关于一个RSA跨语言(java 和py)的加密解密操作

现在有一个需求,java平台提供接口,python平台调用接口,中间用到rsa进行接口的加密解密。java服务端的rsa加密操作已经完成,返回一个16进制的字符串给python平台,但是在python进行私钥解密...

我亦暖心丶
07/17
0
0

没有更多内容

加载失败,请刷新页面

加载更多

docker-compose ,docker-stack

1.例子 version: "3"services: php: image: registry.cn-hangzhou.aliyuncs.com/lxepoo/apache-php5 ports: - "38080:80" networks: - my_php_mysql volum......

chenbaojun
26分钟前
1
0
SQL_Server2000示例数据库NorthWind的分析(转)

SQL_Server2000示例数据库NorthWind的分析 表名:Categories(食品类别表) 表结构: 字段名称 数据类型 长度 允许为空 CategoryID(主键) int 4 否 CategoryName nvarchar 15 否 Description ...

QQZZFT
29分钟前
1
0
laravel 5.5 Session store not set on request.

laravel 5.5 数据存入session,会出现Session store not set on request.错误。查了下laravel 5.5将session放到global middleware中,需要laravel的文件 ./app/Http/Kernel.php中的加上一句:...

MichaelShu
今天
1
0
OpenCV VideoCapture.get()参数详解

param define cv2.VideoCapture.get(0) 视频文件的当前位置(播放)以毫秒为单位 cv2.VideoCapture.get(1) 基于以0开始的被捕获或解码的帧索引 cv2.VideoCapture.get(2) 视频文件的相对位置(...

NateHuang
今天
0
0
java基础知识,小栗子

来操作一下数组.....注意带参数的变长数组的使用. package com.avatus;import java.util.Random;import java.util.Scanner;public class Main { public static void main(St...

Oh_really
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部