天天看点

JAVA加密与解密

摘要算法

摘要算法主要包含三大类型:MD算法,SHA算法,已经基于KEY的MAC算法

MD算法

MD算法主要有MD2,MD3,MD4以及最常用的MD5。

SHA算法主要有SHA-1,SHA-224,SHA-256,SHA-384,SHA-512。

MAC算法是基于哈西散列算法(MD系列或者SHA系列等),在HASH散列进行KEY加密

JAVA密码体系对主流摘要算法的支持

JAVA加密与解密

MD5算法的调用示例

执行结果

对称加密

1、对称加密体制要求加密与解密使用同一个共享密钥,解密是加密的逆运算,对于共享密钥,要求通讯双方在通讯前协商共享密钥并妥善保存

2、对称加密体制分为两种:一种是对明文的单个位(或单个字节)进行加密,称为流密码;另一种是明文划分为不同的组(或块),分别对组加密,称为分组加密

3、常用的为分组加密,分组加密的安全性与分组长度有关,但是一般默认的长度为56位

4、对称加密有DES,DESede,AES,Blowfish,RC2,RC4,IDEA。相关概念可以百度百科

分组密码工作模式

1、电子密码本模式ECB:每次加密均产生独立的密文分组,每组加密的结果不会对其他组产生影响,无初始化向量

2、密文连接模式CBC:目前应用最广泛的工作模式,组明文加密前需先与前面的组密文进行异或运算(XOR)在加密

3、密文反馈模式CFB:类似于自同步流密码,分组加密后,按8位分组将密文和明文进行位移异或得到输出并同时反馈回位移寄存器

4、输出反馈模式OFB:和CFB类似,不过OFB用的是前一个n位密文输出分组反馈回位移寄存器

5、计数器模式CTR:将计数器从初始值开始计数,所得到的值发送给分组密码,随着计数器的增加,分组密码算法输出连续的分组来构成一个位串,该串用来与明文分组进行异或运算。在AES中,经常使用的是CBC和CTR,CTR用的比CBC更多些

填充模式

对于明文进行分组,最后一个分组长度不满足默认长度,称为短分组。对于短分组如何处理,需要使用到填充模式。

Java对对称加密算法的支持

JAVA加密与解密
JAVA加密与解密

Bouncy castle对于PBE的支持

JAVA加密与解密

示例代码

非对称加密

DH:密钥交换算法

DH算法的目的是解决非对称加密解密性能问题,通过协商的方式产生对称密钥。生产对称密钥的步骤大致如下

1、甲方通过DH算法生成甲方的公私钥对

2、甲方加自己的公钥发送给乙方

3、乙方根据甲方的公钥产生自己的公私钥对

4、甲乙双产生协商的好的对应加密算法的对称密钥。甲方生成是通过甲方私钥+乙方公钥使用DH提供的对称密钥的生成方式产生对称密钥;乙方生成是通过乙方私钥+甲方公钥使用DH提供的对称密钥的生成方式产生对称密钥

关键点:甲方需要公布自己的公钥给乙方,乙方生成需要使用此公钥;无法抵挡中间人攻击

密钥长度:512-1024位

密钥默认长度:1024位

工作模式:无

填充方式:无

JDK6.0提供了实现

非对称加密至RSA

JDK6.0提供了RSA加密算法的实现

在RSA算法中,公钥既可以用于解密,也可以用于加密,私钥也是如此。但是公钥加密只能私钥解密,反正私钥加密只能公钥解密。

对于JDK与 Bouncy Castle的实现如下

JAVA加密与解密

<a href="https://www.zhihu.com/question/35137387">https://www.zhihu.com/question/35137387</a>