Java加解密与数字签名
自建博客地址:https://www.bytelife.net,欢迎访问! 本文为博客自动同步文章,为了更好的阅读体验,建议您移步至我的博客👇
本文作者: Jeffrey
本文链接: https://www.bytelife.net/articles/17609.html
版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
本文转载自:QQ兴趣部落: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算法进行的签名。速度快,强度高,签名短。 初始化密钥对; 执行签名; 验证签名