Python 第三方模块之 rsa - 加密解密

RSA 加密

RSA加密算法是一种非对称加密算法。在公开密钥加密和电子商业中RSA被广泛使用。

该算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但那时想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥,即公钥,而两个大素数组合成私钥。公钥是可发布的供任何人使用,私钥则为自己所有,供解密之用。

3个参数:rsa_nrsa_emessagersa_n, rsa_e 用于生成公钥,message:需要加密的消息

因为RSA加密算法的特性,RSA的公钥私钥都是10进制的,但公钥的值常常保存为16进制的格式,所以需要将其用int()方法转换为10进制格式。

安装

1
pip install rsa

使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import rsa
from binascii import b2a_hex, a2b_hex


class RSA(object):
def __init__(self, pub_key, pri_key):
self.pub_key = pub_key
self.pri_key = pri_key

def encrypt(self, text, encode="utf8"):
cipher_text = rsa.encrypt(text.encode(), self.pub_key)
# 因为 RSA 加密时候得到的字符串不一定是 ascii 字符集的,输出到终端或者保存时候可能存在问题
# 所以这里统一把加密后的字符串转化为16进制字符串
print(cipher_text)
return str(b2a_hex(cipher_text), encoding="utf8")

def decrypt(self, text):
decrypt_text = rsa.decrypt(a2b_hex(text), self.pri_key)
return decrypt_text.decode("utf8")


if __name__ == '__main__':
pub_key, pri_key = rsa.newkeys(256)
obj = RSA(pub_key, pri_key)
text = '中国'
text = '1111'
encrypt_text = obj.encrypt(text)
print(encrypt_text) # b'7cb319c67853067abcd16aad25b3a8658e521f83b1e6a6cf0c4c2e9303ad3e14'
print(obj.decrypt(encrypt_text)) # b'hello'

Python 第三方模块之 rsa - 加密解密
https://flepeng.github.io/021-Python-33-Python-第三方模块-35-加解密-Python-第三方模块之-rsa-加密解密/
作者
Lepeng
发布于
2016年8月3日
许可协议