软件介绍
程序运行后有几个选项可以选择,然后根据提示输入文本即可获得加/解密结果。源码仅供参考,由于安全性以及加密算法的复杂度不够,请勿用于专业用途。
算法源码
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()
隐藏内容需要回复可以看见
回复
楼主辛苦了,谢谢楼主,楼主好人一生平安!
楼主辛苦了,谢谢楼主,楼主好人一生平安!
1