Java加解密与数字签名
**
Java加解密
**
实现方式:JDK实现,CC,BC
JDK提供比较基础的底层的实现;CC提供一些简化的操作;BC提供补充
一、Base64加密
非常简单,加密解密就一个函数。
代码如下:
二、消息摘要算法加密————主要用于验证数据完整性。
MD(消息摘要):
SHA(安全散列)
JDK实现和MD一样。
BC实现如下:(Digest类)
CC实现最简单(就是一个DigestUtils的静态方法):
MAC(消息认证码)——含有密钥的散列函数算法
兼容MD和SHA的特性,但加入了密钥。
主要JDK和Bouncy Castle实现。
JDK实现:获取或定义密钥(byte[]数组),Mac类 实例化、初始化、执行。
BC实现:Hmac类 实例化、初始化、执行。
三、对称加解密
对称加密指加密和解密使用相同密钥的加密算法。这里将介绍DES、3重DES、AES和PBE几种常见的对称加密算法在Java中的实现。
DES、3DES、AES(密钥)、PBE(口令和盐)
DES:
JDK实现:生成并转换Key;Cipher类的实例化(getInstance)、初始化(init选择模式与Key);执行(doFinal)加解密。
推荐BC实现方式:Security.addProvider(new BouncyCastleProvider());
然后剩下的代码就可以和JDK实现代码基本一样了。
3DES、AES实现基本一样,所以就不一一介绍。。。
PBE(基于口令的加密)
特点:通过 salt + 口令
实现:初始化盐;生成口令;Cipher类加解密。
四、非对称加解密
非对称加密算法是一种基于密钥的保密方法,需要公开密钥和私有密钥,在文件加密、尤其是网银中应用广泛。这里主要介绍非对称加密算法的实现过程,DH、RSA和ELGamal等几种常见的非对称加密算法的在Java中的应用。
概念:公钥、私钥;
DH(密钥交换算法):
代码实现有些麻烦
——初始化发送方密钥
-KeyPairGenerator :能产生KeyPair
-KeyPair :常用的密钥载体,称为密钥对,分为公钥PublicKey与私钥PrivateKey。
-PublicKey
——初始化接收方密钥
-KeyFactory :密钥工厂,生成密钥,通过某种密钥的规范来还原密钥
-X509EncodedKeySpec :根据ASN.1进行密钥编码
-DHPublicKey :
-DHParameterSpec :遵从DH算法发参数的集合
-KeyPairGenerator :
-PrivateKey :
——双发根据公布的对方的PublicKey构建本地密钥,
——构建出来的本地密钥是一致的
-KeyAgreement :用来提供密钥一致性协议
-SecretKey :秘密密钥,对称
-KeyFactory -X509EncodedKeySpec -PublicKey
——加密、解密(利用本地密钥)
-Cipher :为加密和解密提供密码功能的类
解释:
首先,发送方产生密钥对,并公开 公钥;接收方根据这个公钥产生密钥对,然后也公开自己的 公钥。
然后,发送方根据接收方的 公钥 产生自己本地的密钥(本地密钥一般是采用对称密钥),接收方也根据发送方的 公钥 产生自己本地的密钥。其实,这样双方产生的本地密钥是相同的。
最后,双方就可以利用本地密钥进行加解密了。
RSA(基于因子分解):代码实现较为简单
初始化密钥(包含公钥、密钥)。
可以利用公钥加密,私钥解密;也可以私钥加密,公钥解密
使用过程:双方分别掌握公钥与私钥中的一种,然后就可以加密并传输数据了。
EIGamal(基于离散因数)
JDK没有实现,只能利用BC实现。
首先,Security.addProvider(new BouncyCastleProvider());
之后实现类似于RSA。
五.Java实现数字签名
数字签名用于鉴别数字信息,公钥和私钥,私钥对数据签名,公钥用于检验。
过程为:首先初始化一个密钥对,在密钥对的基础上进行签名与验证。
1、RSA:既可以加解密,也可以数字签名。
初始化密钥对:KeyPairGenerator、KeyPair、RSAPublic、PSAPrivate;
执行签名;Signature类
验证签名;Signature类
2、DSA(数字签名算法)
初始化密钥对,公钥、私钥;
执行签名,用私钥签名;
验证签名,用公钥验证;
3、ECDSA
微软序列号便是采用的ECDSA算法进行的签名。速度快,强度高,签名短。
初始化密钥对;
执行签名;
验证签名
Java加解密与数字签名的更多相关文章
- 160829、Java加解密与数字签名
** Java加解密 ** 实现方式:JDK实现,CC,BC JDK提供比较基础的底层的实现:CC提供一些简化的操作:BC提供补充 一.Base64加密 非常简单,加密解密就一个函数. 代码如下: 二 ...
- 9.Java 加解密技术系列之 RSA
Java 加解密技术系列之 RSA 序 概念 工作流程 RSA 代码实现 加解密结果 结束语 序 距 离上一次写博客感觉已经很长时间了,先吐槽一下,这个月以来,公司一直在加班,又是发版.上线,又是新项 ...
- 3.Java 加解密技术系列之 SHA
Java 加解密技术系列之 SHA 序 背景 正文 SHA-1 与 MD5 的比较 代码实现 结束语 序 上一篇文章中介绍了基本的单向加密算法 — — MD5,也大致的说了说它实现的原理.这篇文章继续 ...
- 2.Java 加解密技术系列之 MD5
Java 加解密技术系列之 MD5 序 背景 正文 结束语 序 上一篇文章中,介绍了最基础的编码方式 — — BASE64,也简单的提了一下编码的原理.这篇文章继续加解密的系列,当然也是介绍比较基础的 ...
- JAVA加解密 -- 数字签名算法
数字签名 – 带有密钥的消息摘要算法 作用:验证数据完整性.认证数据来源.抗否认(OSI参考模型) 私钥签名,公钥验证 RSA 包含非对称算法和数字签名算法 实现代码: //1.初始化密钥 KeyPa ...
- JAVA加解密 -- 消息摘要算法
消息摘要算法是一种单向加密算法 主要用于验证数据完整性,也是数字签名的核心算法 消息鉴别:指在接收方将原始信息进行摘要,然后与接收到的摘要信息进行对比 a.MD家族 – MD5(128位摘要信息) M ...
- 60分钟搞定JAVA加解密
从摩尔电码到小伙伴之间老师来了的暗号,加密信息无处不在.从军事到生活,加密信息的必要性也不言而喻. 今天,我们就来看看java怎么对数据进行加解密 分类 a.古典密码 -- 受限制算法:算法的保密性给 ...
- Java 加解密技术系列文章
Java 加解密技术系列之 总结 Java 加解密技术系列之 DH Java 加解密技术系列之 RSA Java 加解密技术系列之 PBE Java 加解密技术系列之 AES Java 加解密技术系列 ...
- 11.Java 加解密技术系列之 总结
Java 加解密技术系列之 总结 序 背景 分类 常用算法 原理 关于代码 结束语 序 上一篇文章中简单的介绍了第二种非对称加密算法 — — DH,这种算法也经常被叫做密钥交换协议,它主要是针对密钥的 ...
随机推荐
- mount: unknown filesystem type 'LVM2_member'解决方案
系统启动到request_module: runaway loop modprobe binfmt-464c挂起 利用U盘系统,挂载硬盘出现:mount: unknown filesystem typ ...
- WPF 之 数据绑定
数据绑定需要: 后台必须要有与控件对应的类和相关的属性 在后台new 一个类的对象 在后台把控件的数据上下文设置为该对象. 在XAML中把要绑定的控件中Text = "{Bindi ...
- css去掉默认的下拉,实现用户自定义的下拉列表
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- DIV+CSS解决IE6,IE7,IE8,FF兼容问题
1.IE8下兼容问题,这个最好处理,转化成IE7兼容就可以.在头部加如下一段代码,然后只要在IE7下兼容了,IE8下面也就兼容了:1. <metahttp-equivmetahttp-equiv ...
- 会话—session
这篇随笔是上一篇的姊妹篇@_@! session 在WEB开发中,服务器可以为每个用户浏览器创建一个会话对象(session对象),注意:一个浏览器独占一个session对象(默认情况下) ...
- sql语句创建主键、外键、索引、绑定默认值
use Mengyou88_Wuliu --创建公司表 create table dbo.Company2 ( CompanyID ,) not null, CompanyName ) null, A ...
- ASP.Net 获取当前时间,包含各种时间格式
在c# / ASP.net中我们可以通过使用DataTime这个类来获取当前的时间.通过调用类中的各种方法我们可以获取不同的时间:如:日期(2008-09-04).时间(12:12:12).日期+时间 ...
- Objective-C中的封装、继承、多态、分类
封装的好处: 过滤不合理的值 屏蔽内部的赋值过程 让外界不必关注内部的细节 继承的好处: 不改变原来模型的基础上,拓充方法 建立了类与类之间的联系 抽取了公共代码 坏处:耦合性强(当去掉一个父类,子类 ...
- UI1_UIButton
// // AppDelegate.m // UI1_UIButton // // Created by zhangxueming on 15/6/30. // Copyright (c) 2015年 ...
- 济南学习 Day2 T1 am
T1 题意:从1− n中找一些数乘起来使得答案是一个完全平方数,求这个完全平方数 最大可能是多少. 解析: 1. 质因数分解 2. 1->n用质因数指数的相加的形式将1*n累乘起来 3. ...