文档章节

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

pseudo
 pseudo
发布于 2015/06/09 11:15
字数 647
阅读 305
收藏 16
点赞 0
评论 1

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

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

评论(1)

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

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

hxt168 ⋅ 06/06 ⋅ 0

微信小程序开发实战1:通过shareTicket获取分享群的OpenGId

玩过微信小程序的都知道,如果有群排行就必然要获取群的唯一id(OpenGId)。 但是OpenGId的获取必须通过加密数据:encryptedData、加密向量iv获取,对于encryptedData的解密微信官方提供了P...

qicong88 ⋅ 05/18 ⋅ 0

Android外部文件加解密及应用实践

有这样的应用场景,当我们把一些重要文件放到asset文件夹中时,把.apk解压是可以直接拿到这个文件的,一些涉及到重要信息的文件我们并不想被反编译拿去,这个时候需要先对文件进行加密,然后...

C6C ⋅ 05/08 ⋅ 0

Java学习---Java简单认识

前言 小编在学习Java方面的基础知识,发现里面有很多是结合之前的语言的特点发展过来的,不同的地方是,Java有它自己的发展和特点。下面小编先简单地做一下总结,结合看过的1-2章的J2SE视频,...

m18633778874 ⋅ 04/01 ⋅ 0

python和java哈希值区分

欢迎关注天善智能,我们是专注于商业智能BI,人工智能AI,大数据分析与挖掘领域的垂直社区,学习,问答、求职一站式搞定! 对商业智能BI、大数据分析挖掘、机器学习,python,R等数据领域感兴...

天善智能 ⋅ 今天 ⋅ 0

Java序列化之Serializable

1.需求 1.什么是Java序列化 2.详解 1.序列化 理解为"打碎"即可 2.在书本上序列化的意思是将Java对象转为二进制 3.java平台允许我们在内存中创建对象,当JVM运行时对象才能存在,如果JVM停止,对...

村长大神 ⋅ 05/08 ⋅ 0

java基础io流——配角也风流(不求甚解)

本章简单介绍几个常见的io流派生。 1:数据操作流(操作基本类型数据的流)(理解) 代码示例: 2:内存操作流(理解) 用于处理临时存储信息的,程序结束,数据就从内存中消失。 代码示例: 注:查看...

潇潇漓燃 ⋅ 05/30 ⋅ 0

安卓开发必备知识体系:Java篇

大家好我是张拭心,自从各位朋友帮点广X开始,我发现我每天更有奔头了,走起路来也更有劲了,说啥也得更新的勤快一点。不过放心,我一定推送有价值的内容给大家,还请朋友们照旧动动手指点点...

d29h1jqy3akvx ⋅ 05/10 ⋅ 0

Java编程基础知识点和技术点归纳

Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互...

Java小辰 ⋅ 05/23 ⋅ 0

Common Gui Tools 1.4 发布,Java GUI 实用小工具集

Java GUI实用小工具集 Common Gui Tools 新增:二维码生成解析、时间戳转换、Json格式化、文本文件切分等。 Common Gui Tools 是用java编写,GUI界面的实用小工具集,1.4版有20个小工具: 1,...

bs2004 ⋅ 04/22 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

20.zip压缩 tar打包 打包并压缩

6月25日任务 6.5 zip压缩工具 6.6 tar打包 6.7 打包并压缩 6.5 zip压缩工具: zip支持压缩目录 zip压缩完之后原来的文件不删除 不同的文件内容其实压缩的效果不一样 文件内有很多重复的用xz压...

王鑫linux ⋅ 刚刚 ⋅ 0

double类型数据保留四位小数的另一种思路

来源:透析公式处理,有时候数据有很长的小数位,有的时候由在四位以内,如果用一般的处理方法,那么不足四位的小树会补充0到第四位,这样子有点画蛇添足的感觉,不太好看。所以要根据小数的...

young_chen ⋅ 7分钟前 ⋅ 0

Python 优化 回溯下降算法

使用sympy构造表达式,实现回溯下降算法 完整代码 from matplotlib import pyplot as pltimport numpy as npfrom mpl_toolkits.mplot3d import Axes3Dfrom sympy import *import mat......

阿豪boy ⋅ 11分钟前 ⋅ 0

Django配置163邮箱出现 authentication failed(535)错误解决方法

最近用Django写某网站,当配置163邮箱设置完成后,出现535错误即:smtplib.SMTPAuthenticationError: (535, b'Error: authentication failed') Django初始配置邮箱设置 EMAIL_HOST = "smtp.1...

陈墨轩_CJX ⋅ 13分钟前 ⋅ 0

用接口模拟可伸缩枚举(34)

1、枚举的可伸缩性最后证明都不是什么好点子 扩展类型的元素是基本类型实例,基本类型的实例却不是扩展类型的元素,很混乱 目前还没有很好的方法来枚举基本类型的所有元素,及其扩展 可伸缩性...

职业搬砖20年 ⋅ 17分钟前 ⋅ 0

Ubuntu18.04 IDEA快捷键无法使用

IDEA默认的回退到上一视图的快捷键是Ctrl + Alt + Left,在ubuntu中这个快捷键被占用了,在16.04中可以在界面中取消这个快捷键,但是18.04就看不到了,可以使用以下命令解决 gsettings set ...

Iceberg_XTY ⋅ 21分钟前 ⋅ 0

如何解决s权限位引发postfix及crontab异常

一、问题现象 业务反馈某台应用服务器,普通用户使用mutt程序发送邮件时,提示“postdrop warning: mail_queue_enter: create file maildrop/713410.6065: Permission denied”,而且普通用法...

问题终结者 ⋅ 33分钟前 ⋅ 0

Unable to load database on disk

由于磁盘空间满了以后,导致zookeeper异常退出,清理磁盘空间后,zk启动报错,信息如下: 2018-06-25 17:18:46,904 INFO org.apache.zookeeper.server.quorum.QuorumPeerConfig: Reading co...

刀锋 ⋅ 52分钟前 ⋅ 0

css3 box-sizing:border-box 实现div一行多列

<!DOCTYPE html><html><head><style> div.container{ background:green; padding:10px 10px;}div.box{box-sizing:border-box;-moz-box-sizing:border-box; /* Fir......

qimh ⋅ 58分钟前 ⋅ 0

Homebrew简介和基本使用

一、Homebrew是什么 Homebrew是一款Mac OS平台下的软件包管理工具,拥有安装、卸载、更新、查看、搜索等很多实用的功能。简单的一条指令,就可以实现包管理,而不用你关心各种依赖和文件路径...

说回答 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部