• 注册
  • 转载分享 转载分享 关注:171 内容:12813

    一个文本(字符串)加解密算法

  • 查看作者
  • 打赏作者
  • 当前位置: 七七博客 > 转载分享 > 正文
    • 3
    • 转载分享
    • 一个文本(字符串)加解密算法

      软件介绍

      程序运行后有几个选项可以选择,然后根据提示输入文本即可获得加/解密结果。源码仅供参考,由于安全性以及加密算法的复杂度不够,请勿用于专业用途。

      算法源码

      from base64 import b64decode,b64encode
      import hashlib
      from Crypto.Cipher import AES
      ver = 2.0
      numset = 0
      def code_base64(code, state=1):
          if state == 1:
              try:
                  en = b64encode(code.encode('utf-8')).decode("utf-8")
                  return en
              except:
                  return False
          elif state == 2:
              try:
                  de = b64decode(code.encode("utf-8")).decode("utf-8")
                  return de
              except:
                  return False
          else:
              return None
      key = {
          "1":"g", "2":"8", "3":"m", "4":"o", "5":"P", "6":"a", "7":"s", "8":"5", "9":"d", "0":"i",
          "a":"f", "b":"h", "c":"b", "d":"k", "e":"j", "f":"c", "g":"e", "h":"n", "i":"1", "j":"2",
          "k":"3", "l":"4", "m":"0", "n":"B", "o":"E", "p":"O", "q":"Q", "r":"R", "s":"U", "t":"Z",
          "u":"T", "v":"M", "w":"q", "x":"X", "y":"z", "z":"A", "A":"p", "B":"r", "C":"l", "D":"u",
          "E":"v", "F":"w", "G":"I", "H":"J", "I":"C", "J":"x", "K":"y", "L":"N", "M":"t", "N":"9",
          "O":"6", "P":"7", "Q":"L", "R":"H", "S":"G", "T":"D", "U":"S", "V":"F", "W":"K", "X":"W",
          "Y":"V", "Z":"Y"
      }
      key_new = {
          "g":"1", "8":"2", "m":"3", "o":"4", "P":"5", "a":"6", "s":"7", "5":"8", "d":"9", "i":"0",
          "f":"a", "h":"b", "b":"c", "k":"d", "j":"e", "c":"f", "e":"g", "n":"h", "1":"i", "2":"j",
          "3":"k", "4":"l", "0":"m", "B":"n", "E":"o", "O":"p", "Q":"q", "R":"r", "U":"s", "Z":"t",
          "T":"u", "M":"v", "q":"w", "X":"x", "z":"y", "A":"z", "p":"A", "r":"B", "l":"C", "u":"D",
          "v":"E", "w":"F", "I":"G", "J":"H", "C":"I", "x":"J", "y":"K", "N":"L", "t":"M", "9":"N",
          "6":"O", "7":"P", "L":"Q", "H":"R", "G":"S", "D":"T", "S":"U", "F":"V", "K":"W", "W":"X",
          "V":"Y", "Y":"Z"
      }
      def set_numset():
          global numset
          numset = int(input("请设置加密字典(默认0,可设置0到无限): "))
          print("加密字典设置成功!")
      def encrypt():
          global numset
          key = input("请输入加密密钥:") # 新增加密密钥输入
          key = hashlib.sha256(key.encode()).digest() # 对密钥进行哈希处理,得到32字节的密钥
          code = input("请输入要加密的内容: ")
          code = code_base64(code)
          code2 = ""
          for i in code:
              try:
                  code2 += key[i + str(numset)]
              except:
                  code2 += i
          cipher = AES.new(key, AES.MODE_EAX) # 使用AES算法进行加密,选择EAX模式,可以避免填充问题
          ciphertext, tag = cipher.encrypt_and_digest(code2.encode()) # 加密后得到密文和验证标签
          print(b64encode(cipher.nonce + tag + ciphertext).decode(), "\n") # 将随机数、标签和密文拼接后进行base64编码输出
      def decrypt():
          global numset
          key = input("请输入解密密钥:") # 新增解密密钥输入
          key = hashlib.sha256(key.encode()).digest() # 对密钥进行哈希处理,得到32字节的密钥
          code = input("请输入要解密的内容: ")
          code = b64decode(code) # 对输入的内容进行base64解码
          nonce = code[:16] # 取出随机数部分
          tag = code[16:32] # 取出验证标签部分
          ciphertext = code[32:] # 取出密文部分
          cipher = AES.new(key, AES.MODE_EAX, nonce=nonce) # 使用AES算法进行解密,选择EAX模式,传入随机数参数
          try:
              data = cipher.decrypt_and_verify(ciphertext, tag) # 解密并验证标签,如果不匹配会抛出异常
              code2 = ""
              for i in data.decode():
                  try:
                      code2 += key_new[i - numset]
                  except:
                      code2 += i
              code2 = code_base64(code2, 2)
              print(code2, "\n")
          except:
              print("解密失败,可能是因为密钥错误或者数据被篡改\n")
      def main():
          while True:
              print("1.加密")
              print("2.解密")
              print("3.加密字典设置")
              print("4.关于")
              print("5.退出")
              try:
                  state = int(input("请选择:"))
              except:
                  state = 4
              if state == 1:
                  encrypt()
              elif state == 2:
                  decrypt()
              elif state == 3:
                  set_numset()
              elif state == 4:
                  print("Tao Yuanhang Encryption and Decryption(TED) version ", ver)
                  print("基于base64编码以及一些简易加密算法,程序本身仅供学习使用。")
              elif state == 5:
                  break
              else:
                  print("错误!")
      main()

      隐藏内容需要回复可以看见

      回复
      Lv.12

      楼主辛苦了,谢谢楼主,楼主好人一生平安!

      回复
      Lv.4

      楼主辛苦了,谢谢楼主,楼主好人一生平安!

      回复

      1

      回复

      请登录之后再进行评论

      登录
    • 任务系统
    • 帖子间隔 侧栏位置: