Python实现RSA算法的公钥加密私钥解密和私钥签名公钥验签

╰半夏微凉° 2023-02-25 07:21 101阅读 0赞
  1. #!/usr/bin/env python3
  2. # coding=utf-8
  3. """ Created by Johnny 2020/7/8 14:10 """
  4. import rsa
  5. import base64
  6. class RsaUtil:
  7. def __init__(self, privateKey, publicKey, data):
  8. if privateKey and publicKey:
  9. self.privateKey = rsa.PrivateKey.load_pkcs1(privateKey)
  10. self.publicKey = rsa.PublicKey.load_pkcs1(publicKey)
  11. else:
  12. (self.publicKey, self.privateKey) = rsa.newkeys(1024)
  13. self.data = data.encode("utf8")
  14. print("解密前长度: {} \n解密前内容: {}".format(len(data), data))
  15. def encrypt(self):
  16. """ 公钥加密,public.pem 要求 PKCS1 格式 :return: encryptData 加密后内容 """
  17. length = len(self.data)
  18. length_max = 117
  19. encryptDataText = []
  20. for i in range(0, length, length_max):
  21. encryptDataText.append(
  22. rsa.encrypt(self.data[i:i + length_max], self.publicKey)) # str类型,需要进行encode()转化为bytes
  23. encryptData = b''.join(encryptDataText)
  24. encryptedData = base64.b64encode(encryptData)
  25. print("加密后内容:", encryptedData.decode())
  26. return encryptData
  27. def decrypt(self, encryptData):
  28. """ 私钥解密,private.pem 要求 PKCS1 格式 :param encryptData: RSA公钥加密后内容 :return: decryptData 解密后内容 """
  29. length = len(encryptData)
  30. length_max = 128
  31. decryptDataText = []
  32. for i in range(0, length, length_max):
  33. decryptDataText.append(
  34. rsa.decrypt(encryptData[i:i + length_max], self.privateKey).decode()) # bytes类型,需要进行decode()转化为str
  35. decryptData = ''.join(decryptDataText)
  36. print("解密后长度: {} \n解密后内容: {}".format(len(decryptData), decryptData))
  37. def sign(self):
  38. # hash_method: the hash method used on the message. Use 'MD5', 'SHA-1','SHA-224', SHA-256', 'SHA-384' or 'SHA-512'.
  39. return rsa.sign(self.data, self.privateKey, 'MD5')
  40. def verify(self, signature):
  41. return bool(rsa.verify(self.data, signature, self.publicKey))
  42. if __name__ == "__main__":
  43. privateKey = '''-----BEGIN RSA PRIVATE KEY----- MIICXgIBAAKBgQDZAzJb0n62WqMKQUFBdIBUc8Ld8NKuK1nrd9xXVrqt/UwXQlYn MuGc8M1+c4rhRMZHcG1a4RBwUZBjQSWFSf9RdYAMHdyncmiHeTcAExZJC8jN8DrR arbcJqPPPFPSsCMoRh9mxZESLJPikJjUCEdZvBYKXbMtiW5y3eefR6U2WQIDAQAB AoGBAL1NtZM11sUZ4ZmjfNotV3jUFovmdNHsDR+DylkB1gzKpaKwgljlYLu3r3p8 Lgz+InzVDP+2ztE7xVlfzewstaNtRF/P32DI1J+zkK8tvW9jJ1Qj3kBIBeS6adn2 iWeMzcA4hNSekNPj3OXl8ZlsQHcwM+U0WoJV6t6nHF3dMMyBAkEA7KzVGFW5CgBn OLITLbtMCpWgLeL7Cz5ZVZ/0bWOQ8L4Tl2h64XmPCLFWlmIWN1o8ndncfrb7r2BG Y1QJcaNiyQJBAOq7XEuB9TMwXl6L8YdY18Ejve9TrTy8B9m9b++SeYYpKmrQrGxX KOpSY6CV3W04fTdnv3GSeMD1wwqC3oUC7xECQQDAREd41WrU7S7tp/xckmNb1eGi ZVp779Ky9JakptYAPOm9fmsU8KN59FbbJCPYI75Kncm6Rvx/pD6KQqLJZmnBAkEA uLeqYM0rHRZCHRr5fa4fUyECVbS+jh3V+7ZEwP2+XiJE+/usxDEuxH8DYZqtvkaG 2zPshr5iAk8kJkBoRbnSUQJAbS97Id1Beq/rejivApjKTP2lCfkOj4TbluNspiec rs7Eac1FTIFOwD+6tMG3K7nuRQ1UB9Cltjy15XW8MmYHRA== -----END RSA PRIVATE KEY----- '''
  44. publicKey = '''-----BEGIN RSA PUBLIC KEY----- MIGJAoGBANkDMlvSfrZaowpBQUF0gFRzwt3w0q4rWet33FdWuq39TBdCVicy4Zzw zX5ziuFExkdwbVrhEHBRkGNBJYVJ/1F1gAwd3KdyaId5NwATFkkLyM3wOtFqttwm o888U9KwIyhGH2bFkRIsk+KQmNQIR1m8Fgpdsy2JbnLd559HpTZZAgMBAAE= -----END RSA PUBLIC KEY----- '''
  45. # publicKey = privateKey = None
  46. data = 'nihao@456'
  47. RsaUtil = RsaUtil(privateKey, publicKey, data)
  48. encryptData = RsaUtil.encrypt()
  49. RsaUtil.decrypt(encryptData)
  50. signature = RsaUtil.sign()
  51. print(str(signature))
  52. result = RsaUtil.verify(signature)
  53. print("验签:", result)

发表评论

表情:
评论列表 (有 0 条评论,101人围观)

还没有评论,来说两句吧...

相关阅读