非对称加密算法-RSA
注意:本节内容主要参考自《Java加密与解密的艺术(第2版)》第8章“高等加密算法–非对称加密算法”
1、RSA(最经典的非对称加密算法)
特点:
使用一套密钥即可完成加解密(与DH不同)
与DH不同的第二点是,RSA自己可以完成加解密,而DH需要依赖于对称加密算法
“私钥加密,公钥解密”或“公钥加密,私钥解密”
公钥长度远小于私钥长度(对下边的代码进行测试,自己比较结果)
加解密流程:
1)发送方(假设为甲方)构建密钥对,自己保留私钥,将公钥发送给接收方(假设为乙方)
2)甲方使用密钥对消息进行加密,乙方使用公钥对消息解密(“私钥加密,公钥解密”)或者乙方使用公钥对消息进行加密,甲方使用私钥对消息解密(“公钥加密,私钥解密”)
注意:公钥加密方式存在安全隐患,如果需要更加安全的方式,就需要甲乙双方均存一份密钥对,仅仅使用“私钥加密,公钥解密”的方式,这种方式与DH类似,但是不同,在DH中甲乙双方各自保留着自己的公钥+私钥,而更安全的RSA是甲乙方法均保存着自己的私钥与对方的公钥,这是RSA与DH的第三点不同。
实现方式:
JDK(工作模式只有ECB,填充方式可以采用PKCS1Padding,没有PKCS5Padding,密钥长度:512~65536(64的整数倍))
Bouncy Castle(BC,工作模式没有,填充方式可以采用PKCS1Padding,没有PKCS7Padding,密钥长度:512~65536(64的整数倍))
基于JDK实现的RSA加解密代码:
注意:
自己若看了DH算法,试着比较一下RSA算法与DH的区别,并使这些一下更安全的RSA算法(生成两个密钥对,其实就是在上述的代码中再添加一个乙方的密钥对生成方法即可)