概念网上很多,不再赘述,直接上代码。
import rsa
import base64
# 1、公私钥由服务端生成(agent配置文件是服务端生成)
# 2、对称加密key必须是16位字符串,采用公钥加密,私钥解密
# 3、body数据采用key进行res对称加密
class MyRsa(object):
# 生成公私钥
def genkey(self):
(pubkey, privkey) = rsa.newkeys(1024)
with open('public.pem', 'w+') as f:
f.write(pubkey.save_pkcs1().decode())
with open('private.pem', 'w+') as f:
f.write(privkey.save_pkcs1().decode())
@staticmethod
def encrypt(key):
with open('public.pem', 'rb') as publickfile:
p = publickfile.read()
pubkey = rsa.PublicKey.load_pkcs1(p)
encrypt_key = rsa.encrypt(key.encode('utf-8'), pubkey)
encrypt_key = base64.standard_b64encode(encrypt_key)
return encrypt_key
@staticmethod
def decrypt(encrypt_key):
with open('private.pem', 'rb') as privatefile:
p = privatefile.read()
privkey = rsa.PrivateKey.load_pkcs1(p)
encrypt_key = base64.standard_b64decode(encrypt_key)
key = rsa.decrypt(encrypt_key, privkey)
return key
if __name__ == '__main__':
myrsa = MyRsa()
a = myrsa.encrypt("1234567890abcdef")
print("加密后", a.decode('utf-8'))
b = myrsa.decrypt(a)
print("解密后", b.decode('utf-8'))