| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- from abc import ABC, abstractmethod
- from Cryptodome.PublicKey import RSA
- from Cryptodome.Cipher import PKCS1_v1_5
- import base64
- import rsa
- # 定义抽象基类
- class RSACrypto(ABC):
- @abstractmethod
- def encrypt(self, password: str) -> str:
- pass
- @abstractmethod
- def decrypt(self, encrypted_password: str) -> str:
- pass
- # 实现 RagflowCrypto 类
- class RagflowCrypto(RSACrypto):
- def __init__(self, public_key: str, private_key: str):
- self.public_key = public_key
- self.private_key = private_key
- def encrypt(self, password: str) -> str:
- rsa_key = RSA.importKey(self.public_key)
- cipher = PKCS1_v1_5.new(rsa_key)
- encrypted_password = cipher.encrypt(base64.b64encode(password.encode('utf-8')))
- return base64.b64encode(encrypted_password).decode('utf-8')
- def decrypt(self, encrypted_password: str) -> str:
- rsa_key = RSA.importKey(self.private_key)
- cipher = PKCS1_v1_5.new(rsa_key)
- encrypted_password_bytes = base64.b64decode(encrypted_password)
- decoded_password = cipher.decrypt(encrypted_password_bytes, "Fail to decrypt password!")
- return base64.b64decode(decoded_password).decode('utf-8')
- # 实现 BishengCrypto 类
- # class BishengCrypto(RSACrypto):
- #
- # def __init__(self, public_key, private_key: str):
- # self.public_key = public_key
- # self.private_key = private_key
- #
- # def encrypt(self, password: str) -> str:
- # rsa_key = RSA.importKey(self.public_key)
- # cipher = PKCS1_v1_5.new(rsa_key)
- # encrypted_password = cipher.encrypt(password.encode('utf-8'))
- # return base64.b64encode(encrypted_password).decode('utf-8')
- #
- # def decrypt(self, encrypted_password: str) -> str:
- # rsa_key = RSA.importKey(self.private_key)
- # cipher = PKCS1_v1_5.new(rsa_key)
- # encrypted_password_bytes = base64.b64decode(encrypted_password)
- # decoded_password = cipher.decrypt(encrypted_password_bytes, "Fail to decrypt password!")
- # return decoded_password.decode('utf-8')
- class BishengCrypto:
- def __init__(self, public_key: str, private_key: str):
- self.public_key = rsa.PublicKey.load_pkcs1(public_key.encode('utf-8'))
- def encrypt(self, password: str) -> str:
- encrypted_password = rsa.encrypt(password.encode('utf-8'), self.public_key)
- return base64.b64encode(encrypted_password).decode('utf-8')
- @classmethod
- def decrypt(cls, password: str, private_key: str) -> str:
- private_key = rsa.PrivateKey.load_pkcs1(private_key.encode('utf-8'))
- encrypted_password_bytes = base64.b64decode(password)
- return rsa.decrypt(encrypted_password_bytes, private_key).decode('utf-8')
|