博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java加解密与数字签名
阅读量:6708 次
发布时间:2019-06-25

本文共 1981 字,大约阅读时间需要 6 分钟。

** 

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

初始化密钥对; 

执行签名; 

验证签名

转载于:https://www.cnblogs.com/downey/p/5832284.html

你可能感兴趣的文章
外国文学最佳中译本合集-选
查看>>
关于this的指向问题
查看>>
我在 impress.js 中学到的小套路
查看>>
notepad++之TextFX插件
查看>>
静态数码管——小白的单片机笔记
查看>>
文件处理之处理模式及其黑魔法
查看>>
基于FPGA的电压表与串口通信(下)
查看>>
How to Allow Apps from Anywhere in macOS Gatekeeper (Mojave, Sierra, High Sierra)
查看>>
Windows 下目录切换以及挂载小技巧
查看>>
读取STGMEDIUM中的数据
查看>>
linux命令之添加删除磁盘分区
查看>>
Canvas练习
查看>>
Mac 常用命令及快捷键
查看>>
post
查看>>
Javascript面向对象编程(三) 非构造函数的继承
查看>>
[python机器学习及实践(6)]Sklearn实现主成分分析(PCA)
查看>>
Jquery 错误提示插件
查看>>
关于ARC和MRC
查看>>
history.back(-1)和history.go(-1)的区别
查看>>
数据表删除、清空操作
查看>>