coolplaylin 发表于 2023-1-11 23:02:02

基于密码字典的加密工具及字典生成(凯撒密码)

从自己的项目中扒出来的代码(

加密功能和字典生成已完成,解密功能嘛。。。。在路上。。。。

原函数文档用英文写的,这里懒得再写,所有直接机翻,可能会有亿些别扭

class TechnologyError(Exception):
    pass

class Password:
    def Set_Config(self) -> None:
      self.Mode = ["Strict", "Ignore", "Retain"]
      self.Ignore = [" ", "\n", "(", ")", ",", ".", "_", ":", "-"]
    def Set_Str(self) -> None:
      self.Uppercase = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
      self.Lowercase = "abcdefghijklmnopqrstuvwxyz"
      self.Numbers = "1234567890"
    def Export_Undefined(self, Text:str, Dictionary:dict) -> list:
      return


class Dictionary(Password):
    def __init__(self) -> None:
      super().Set_Str()


    def Caesar(self, Offset:int, Uppercase=True, Lowercase=False, Number=False, Self_String=None) -> dict:
      """
      Offset
            设置字符偏移的位数
      Uppercase
            添加大写字母
      Lowercase
            添加小写字母
      Number
            添加数字
      Self_String
            使用自己的字符串
      
      Note:
            1. 启用 Self_String 后,将忽略大写、小写和数字的 bool 类型,并且会直接使用 Self_String 作为值生成字典,因此此时忽略的三个数据集将无效
            2. offset 参数不能超过字典中要生成的字符串数,否则会自爆
            3. 不能同时设置大写、小写和数字而不设置Self_String,即没有字符串要生成,否则会自爆。
      """
      _Upper = self.Uppercase
      _Lower = self.Lowercase
      _Numbers = self.Numbers
      _Offset = int(Offset)
      _StringList = []
      _Dictionary = {}
      _Source = Self_String if bool(Self_String) else (_Upper if bool(Uppercase) else "") + (_Lower if bool(Lowercase) else "") + (_Numbers if bool(Number) else "")
      _ErrorMessage = "The offset data exceeds the limit" if _Offset > len(_Source) else "The offset data exceeds the limit" if _Source is None else False
      if bool(_ErrorMessage):
            raise TechnologyError(_ErrorMessage)
      for each in _Source:
            _StringList.append(each)
      for each in _StringList:
            _Dictionary = _StringList if _StringList.index(each) + _Offset < len(_StringList) else _StringList
      
      return _Dictionary

class Encrypt(Password):
    def __init__(self) -> None:
      super().Set_Config()
   

    def Caesar(self, Text:str, Dictionary:dict, Mode="Strict", Add_Ignore=True) -> str:
      """
      Text
            需要加密的文本
      Dictionary
            加密所需的字典(可以使用字典对象生成)
      Mode
            加密模式(默认为严格),可以在对象的 Mode 属性中查看所有模式。
      Add_Ignore
            在字典中添加需要忽略的字符,这些字符将被保留(空格默认禁用并启用),可以修改 Ignore 的值来更改它们

      模式文档
            Strict: 将所有明文字符包含在字典中,如果不这样做,它们就会自爆。
            Ignore: 忽略并丢弃字典中未包含的所有字符。
            Retain: 保留未定义的字符(未定义的字符会自动添加到字典中)
      """
      # 错误检查
      if bool(Add_Ignore):
            for each in self.Ignore:
                Dictionary = each
      _Undefined = super().Export_Undefined(Text, Dictionary) # 导出未定义的字符
      _ErrorMessage = "The plaintext entered is empty" if not bool(str(Text)) else "The current pattern does not exist" if Mode not in self.Mode else "The value of the dictionary must be of type dict" if type(Dictionary) is not dict else "Contains characters that are not defined in the dictionary {}{}".format("\n", str(_Undefined)) if bool(_Undefined) and self.Mode.index(Mode) == 0 else None # 导出错误信息
      if bool(_ErrorMessage):
            raise TechnologyError(_ErrorMessage)
      _ModeType = self.Mode.index(Mode) # 将Mode字符转换为整数
      _Password = ""
      if _ModeType == 2 and bool(_Undefined):
            for each in _Undefined:
                Dictionary = each # Retain模式添加未定义的字符
      _PasswordList = for each in Text] if _ModeType == 0 else for each in Text if each in Dictionary] if _ModeType == 1 else for each in Text] if _ModeType == 2 else None # 加密
      for each in _PasswordList:
            _Password += each

      return _Password

coolplaylin 发表于 2023-1-11 23:02:55

一行流用得有亿点多。。。{:10_245:}
页: [1]
查看完整版本: 基于密码字典的加密工具及字典生成(凯撒密码)