** 

    Java加解密 

    ** 

实现方式:JDK实现,CC,BC 

JDK提供比较基础的底层的实现;CC提供一些简化的操作;BC提供补充 

    一、Base64加密 

    非常简单,加密解密就一个函数。 

代码如下:

160829、Java加解密与数字签名

  二、消息摘要算法加密————主要用于验证数据完整性。 

    MD(消息摘要):
160829、Java加解密与数字签名

  SHA(安全散列) 

JDK实现和MD一样。 

BC实现如下:(Digest类)

160829、Java加解密与数字签名

  CC实现最简单(就是一个DigestUtils的静态方法):
160829、Java加解密与数字签名

 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 :为加密和解密提供密码功能的类

160829、Java加解密与数字签名

解释: 

首先,发送方产生**对,并公开 公钥;接收方根据这个公钥产生**对,然后也公开自己的 公钥。 

然后,发送方根据接收方的 公钥 产生自己本地的**(本地**一般是采用对称**),接收方也根据发送方的 公钥 产生自己本地的**。其实,这样双方产生的本地**是相同的。 

最后,双方就可以利用本地**进行加解密了。 

    RSA(基于因子分解):代码实现较为简单 

初始化**(包含公钥、**)。 

可以利用公钥加密,私钥解密;也可以私钥加密,公钥解密 

使用过程:双方分别掌握公钥与私钥中的一种,然后就可以加密并传输数据了。

160829、Java加解密与数字签名

160829、Java加解密与数字签名

160829、Java加解密与数字签名

  EIGamal(基于离散因数) 

JDK没有实现,只能利用BC实现。 

首先,Security.addProvider(new BouncyCastleProvider()); 

之后实现类似于RSA。

160829、Java加解密与数字签名

五.Java实现数字签名 

    数字签名用于鉴别数字信息,公钥和私钥,私钥对数据签名,公钥用于检验。 

过程为:首先初始化一个**对,在**对的基础上进行签名与验证。 

1、RSA:既可以加解密,也可以数字签名。 

初始化**对:KeyPairGenerator、KeyPair、RSAPublic、PSAPrivate; 

执行签名;Signature类 

验证签名;Signature类 

2、DSA(数字签名算法) 

初始化**对,公钥、私钥; 

执行签名,用私钥签名; 

验证签名,用公钥验证; 

3、ECDSA 

微软***便是采用的ECDSA算法进行的签名。速度快,强度高,签名短。 

初始化**对; 

执行签名; 

验证签名

相关文章: