非对称加密算法

概括

非对称加密算法需要两个密钥:公开密钥(publickey:简称公钥)和私有密钥(privatekey:简称私钥)。公钥与私钥是一对,如果用公钥对数据进行加密,只有用对应的私钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。

基本过程

甲方生成一对密钥并将公钥公开,需要向甲方发送信息的其他角色(乙方)使用该密钥(甲方的公钥)对机密信息进行加密后再发送给甲方;甲方再用自己私钥对加密后的信息进行解密。甲方想要回复乙方时正好相反,使用乙方的公钥对数据进行加密,同理,乙方使用自己的私钥来进行解密。

graph LR
A(L61q4_Cheng)-->B(公钥A)
B-->C(密文)
C-->D(私钥B)
D-->E(L61q4_Cheng)

注:私钥B中包含公钥A

特点

算法强度复杂、安全性依赖于算法与密钥但是由于其算法复杂,而使得加密解密速度没有对称加密解密的速度快。对称密码体制中只有一种密钥,并且是非公开的,如果要解密就得让对方知道密钥。所以保证其安全性就是保证密钥的安全,而非对称密钥体制有两种密钥,其中一个是公开的,这样就可以不需要像对称密码那样传输对方的密钥了。

1、使用公钥加密,使用私钥解密。

2、公钥是公开的,私钥是保密的(私钥包含公钥信息)。

3、密钥不能随便写,由特定函数生成。

4、加密处理安全,但性能差,单次加密长度有限。

pkcslpadding 明文最大字节数为密钥字节数-11,明文与密钥等长。
NoPadding 明文最大字节数为密钥字节数,明文与密钥等长。

5、可用于数据交换,也可用于数据校验。

注:私钥格式有两种,Java中密钥格式为PKCS#8,其他为PKCS#1。

使用PKCS#8,私钥开头为

—-BEGIN PRIVATE KEY—

使用PKCS#1,私钥格式为

—-BEGIN RSA PRIVATE KEY—

主要功能

非对称加密体系不要求通信双方事先传递密钥或有任何约定就能完成保密通信,并且密钥管理方便,可实现防止假冒和抵赖,因此,更适合网络通信中的保密通信要求。

主要算法

RSA、Elgamal、背包算法、Rabin、D-H、ECC (椭圆曲线加密算法)。使用最广泛的是 RSA 算法,Elgamal 是另一种常用的非对称加密算法。

两种加密算法结合的套路

1、随机生成密钥,用作对称加密算法(AES/DES/3DES)的加密数据。

2、RSA对密钥进行加密,提交加密后的密钥和加密后的数据给服务器。