目录
一、RSA加密、解密、签名、验签(验证签名)&RSA算法原理
三、python 实现Public_key加密,Private_key解密
四、python 实现Private_Key签名,使用Public_Key验签
一、RSA加密、解密、签名、验签(验证签名)&RSA算法原理
加密:加密是为了防止信息被泄露;
签名:签名是为了防止信息被篡改,保证数据完整性和发送方角色的可靠性和不可抵赖性。
RSA加密是一种非对称加密。可以在不直接传递密钥的情况下,完成解密;是由一对密钥来进行加解密的过程,分别称为公钥和私钥。两者之间有数学相关,该加密算法的原理就是对一极大整数做因数分解的困难性来保证安全性。通常个人保存私钥,公钥是公开的(可能同时多人持有)。
1、RSA加密、签名区别:
这里将A理解为客户端,B理解为服务端,A、B分别有一对公钥和私钥。
1.1 加解密过程简述
A和B进行通信加密,B要先生成一对RSA密钥,B自己持有私钥,给A公钥 —>A使用B的公钥加密要发送的内容,然后B接收到密文后通过自己的私钥解密内容
1.2 签名验签过程简述
A给B发送消息,A先计算出消息的消息摘要,然后使用自己的私钥加密消息摘要,被加密的消息摘要就是签名.(A用自己的私钥给消息摘要加密成为签名)
B收到消息后,也会使用和A相同的方法提取消息摘要,然后用A的公钥解密签名,并与自己计算出来的消息摘要进行比较–>如果相同则说明消息是A发送给B的,同时,A也无法否认自己发送消息给B的事实.(B使用A的公钥解密签名文件的过程,叫做"验签").
2、对签名和验签过程详细理解:
2.1 签名过程:
2.1.1 A计算消息m的消息摘要,记为 h(m);
2.1.2 A使用私钥(n,d)对h(m)加密,生成签名s, s满足:s=(h(m))^d mod n;
2.1.3 由于A是用自己的私钥对消息摘要加密,所以只用使用s的公钥才能解密该消息摘要,这样A就不可否认自己发送了该消息给B;
2.1.4 A发送消息和签名(m,s)给B。