RSA加密是一种非对称加密,通常使用公钥加密,私钥解密。
公钥、私钥的生成
def get_key():
// 生成公钥、私钥
pubkey, privkey = rsa.newkeys(1024)
// 公钥、私钥进行转换,以便存储。
// save_pkcs1 为内置方法,默认值为“PEM”
pub = pubkey.save_pkcs1()
priv = privkey.save_pkcs1('PEM')
// 创建文件,进行存储
with open('pubkey.pem', mode='wb') as f:
f.write(pub)
with open('privkey.pem', mode='wb') as f:
f.write(priv)
生成文件如下图:
可以将生成的公钥、私钥粘贴复制存储起来,以便使用:
加密
def rsa_encrypt_password(encrypted_password):
"""
rsa公钥加密
"""
return rsa.encrypt(encrypted_password.encode('utf-8'),
rsa.PublicKey.load_pkcs1(settings.RSA_PUB_KEY))
解密
def rsa_decrypt_password(encrypted_password):
"""
rsa私钥解密
"""
return rsa.decrypt(encrypted_password, rsa.PrivateKey.load_pkcs1(settings.RSA_PRIV_KEY))
使用
aa = rsa_encrypt_password('aaaa')
print(aa)
r_aa = rsa_decrypt_password(aa)
print(r_aa.decode('utf-8')) // 使用之前必须先解码
扩展
在使用中, 通常会先对数据进行bas64加密, 再对加密后的内容使用rsa加密, 最后对rsa解密后的内容进行bas64解密.
base64 + ras 加密
def rsa_encrypt_password(encrypted_password):
"""
rsa加密
"""
return base64.b64encode(rsa.encrypt(encrypted_password.encode('utf-8'),
rsa.PublicKey.load_pkcs1(settings.RSA_PUB_KEY)))
base64 + ras 解密
def rsa_decrypt_password(encrypted_password):
"""
rsa解密
"""
return rsa.decrypt(base64.decodestring(encrypted_password),
rsa.PrivateKey.load_pkcs1(settings.RSA_PRIV_KEY))