rsa.py 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. import base64
  2. import time
  3. import json
  4. from Crypto.Cipher import PKCS1_v1_5 as PKCS1_cipher
  5. from Crypto.PublicKey import RSA
  6. PUBLIC_KEY = '-----BEGIN PUBLIC KEY-----\n\
  7. MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDElMhAUOwyo78M97jDGlYvl1FZ\n\
  8. JZV+/EKZ3G7VDO1T5uUNnXWqgxSSwobbd384/npxvfFznoeJ+PaM/fXFNeOGKL9N\n\
  9. GrswS/jTmSdIUdoMQVbGuzrGUK1liK+L9VGxxCmbvJ1f+6iiOHUwZAx6AXA2Mk2s\n\
  10. 8LVtXFCoM5cZWG4GiQIDAQAB\n\
  11. -----END PUBLIC KEY-----'
  12. class RSAService:
  13. def __int__(self):
  14. pass
  15. def encrypt_public(self, phone) -> str:
  16. """
  17. 使用公钥加密电话号码。
  18. 该方法首先构建一个包含电话号码、时间戳和设备信息的数据字典,
  19. 然后将该字典转换为JSON字符串,并将其编码为UTF-8字节流。
  20. 接着,使用RSA公钥对这些数据进行加密,并将加密后的数据使用Base64进行编码,
  21. 最后返回加密后的字符串。
  22. 参数:
  23. phone -- 需要加密的电话号码。
  24. 返回:
  25. 加密后的电话号码字符串。
  26. """
  27. # 构建数据字典,包含电话号码、当前时间和设备信息
  28. data = {"phone": phone, "time": int(time.time() * 1000), "device": "python"}
  29. # 将数据字典转换为JSON字符串,并编码为UTF-8字节流
  30. msg = json.dumps(data).encode("utf8")
  31. # 使用RSA公钥创建加密器
  32. cipher = PKCS1_cipher.new(RSA.importKey(PUBLIC_KEY))
  33. # 使用RSA公钥加密数据,并使用Base64编码加密后的数据
  34. encrypt_text = base64.b64encode(cipher.encrypt(bytes(msg)))
  35. # 返回加密后的数据字符串
  36. return encrypt_text.decode('utf-8')
  37. if __name__ == '__main__':
  38. rsaService = RSAService()
  39. msg = rsaService.encrypt_public(phone='13323232323')
  40. print(msg)