diff --git a/packages/nonebot-adapter-feishu/nonebot/adapters/feishu/utils.py b/packages/nonebot-adapter-feishu/nonebot/adapters/feishu/utils.py new file mode 100644 index 00000000..34750255 --- /dev/null +++ b/packages/nonebot-adapter-feishu/nonebot/adapters/feishu/utils.py @@ -0,0 +1,33 @@ +import base64 +import hashlib + +from Crypto.Cipher import AES +from nonebot.utils import logger_wrapper + +log = logger_wrapper("FEISHU") + +class AESCipher(object): + + def __init__(self, key): + self.block_size = AES.block_size + self.key = hashlib.sha256(AESCipher.str_to_bytes(key)).digest() + + @staticmethod + def str_to_bytes(data): + u_type = type(b"".decode('utf8')) + if isinstance(data, u_type): + return data.encode('utf8') + return data + + @staticmethod + def _unpad(s): + return s[:-ord(s[len(s) - 1:])] + + def decrypt(self, enc): + iv = enc[:AES.block_size] + cipher = AES.new(self.key, AES.MODE_CBC, iv) + return self._unpad(cipher.decrypt(enc[AES.block_size:])) + + def decrypt_string(self, enc): + enc = base64.b64decode(enc) + return self.decrypt(enc).decode('utf8')