**

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算法进行的签名。速度快,强度高,签名短。

初始化密钥对;

执行签名;

验证签名

160829、Java加解密与数字签名的更多相关文章

  1. Java加解密与数字签名

    ** Java加解密 ** 实现方式:JDK实现,CC,BC JDK提供比较基础的底层的实现:CC提供一些简化的操作:BC提供补充 一.Base64加密 非常简单,加密解密就一个函数. 代码如下: 二 ...

  2. 9.Java 加解密技术系列之 RSA

    Java 加解密技术系列之 RSA 序 概念 工作流程 RSA 代码实现 加解密结果 结束语 序 距 离上一次写博客感觉已经很长时间了,先吐槽一下,这个月以来,公司一直在加班,又是发版.上线,又是新项 ...

  3. 3.Java 加解密技术系列之 SHA

    Java 加解密技术系列之 SHA 序 背景 正文 SHA-1 与 MD5 的比较 代码实现 结束语 序 上一篇文章中介绍了基本的单向加密算法 — — MD5,也大致的说了说它实现的原理.这篇文章继续 ...

  4. 2.Java 加解密技术系列之 MD5

    Java 加解密技术系列之 MD5 序 背景 正文 结束语 序 上一篇文章中,介绍了最基础的编码方式 — — BASE64,也简单的提了一下编码的原理.这篇文章继续加解密的系列,当然也是介绍比较基础的 ...

  5. JAVA加解密 -- 数字签名算法

    数字签名 – 带有密钥的消息摘要算法 作用:验证数据完整性.认证数据来源.抗否认(OSI参考模型) 私钥签名,公钥验证 RSA 包含非对称算法和数字签名算法 实现代码: //1.初始化密钥 KeyPa ...

  6. JAVA加解密 -- 消息摘要算法

    消息摘要算法是一种单向加密算法 主要用于验证数据完整性,也是数字签名的核心算法 消息鉴别:指在接收方将原始信息进行摘要,然后与接收到的摘要信息进行对比 a.MD家族 – MD5(128位摘要信息) M ...

  7. 60分钟搞定JAVA加解密

    从摩尔电码到小伙伴之间老师来了的暗号,加密信息无处不在.从军事到生活,加密信息的必要性也不言而喻. 今天,我们就来看看java怎么对数据进行加解密 分类 a.古典密码 -- 受限制算法:算法的保密性给 ...

  8. Java 加解密技术系列文章

    Java 加解密技术系列之 总结 Java 加解密技术系列之 DH Java 加解密技术系列之 RSA Java 加解密技术系列之 PBE Java 加解密技术系列之 AES Java 加解密技术系列 ...

  9. 11.Java 加解密技术系列之 总结

    Java 加解密技术系列之 总结 序 背景 分类 常用算法 原理 关于代码 结束语 序 上一篇文章中简单的介绍了第二种非对称加密算法 — — DH,这种算法也经常被叫做密钥交换协议,它主要是针对密钥的 ...

随机推荐

  1. rm 命令(转)

    昨天学习了创建文件和目录的命令mkdir ,今天学习一下linux中删除文件和目录的命令: rm命令.rm是常用的命令,该命令的功能为删除一个目录中的一个或多个文件或目录,它也可以将某个目录及其下的所 ...

  2. 在Matlab中编译c/c++代码需要安装mex

    >> mex -setup Welcome to mex -setup. This utility will help you set up a default compiler. For ...

  3. RDIFramework.NET V2.7 Web版本升手风琴+树型目录(2级+)方法

    RDIFramework.NET V2.7 Web版本升手风琴+树型目录(2级+)方法 手风琴风格在Web应用非常的普遍,越来越多的Web应用都是采用这种方式来体现各个功能模块,传统的手风琴风格只支持 ...

  4. 线段树 Interval Tree

    一.线段树 线段树既是线段也是树,并且是一棵二叉树,每个结点是一条线段,每条线段的左右儿子线段分别是该线段的左半和右半区间,递归定义之后就是一棵线段树. 例题:给定N条线段,{[2, 5], [4, ...

  5. SQLSERVER:Timeout expired. The timeout period elapsed prior to obtaining a connection from the pool. This may have occurred because all pooled connections were in use and max pool size was reached.

    背景: 在最近开发中遇到一个问题,对一个数据库进行操作时,我采用64个并行的任务每个任务保证一个数据库连接对象:但是每个任务内部均包含有24个文件需要读取,在读取文件之后,我们需要快速将这24个文件批 ...

  6. 安装shopex注意事项

    [原创]关于PHP5.3.x和Zend Optimizer(Zend Guard Loader),以及shopex4.8.5安装的问题  http://dzmailbox.blog.163.com/b ...

  7. devexpress13学习系列(一)PDFViewer(1)

    使用这个组件,可以直接在winform里显示pdf文档,不需要另外装软件了. 有这么几个重要的属性: 1.DocumentFilePath:要读取的PDF的文件和路径. 2.CurrentPageNu ...

  8. 多文件 定义全局变量的使用 extern

    extern 申明变量在其他文件中定义了.如果变量放在*.h头文件,其它cpp文件加载*.h头文件就会出现变量定义重复. 头文件 DHeah.h #include <iostream> u ...

  9. SQL 基本的函数

    select * from emp;

  10. [转]Apache Maven 入门篇 ( 上 )

    原文地址:Apache Maven 入门篇 ( 上 ) 作者:George Ma 写这个 maven 的入门篇是因为之前在一个开发者会的动手实验中发现挺多人对于 maven 不是那么了解,所以就有了这 ...