使用Python创建的20种随机解码器
1. Base64解码器:
import base64
# 编码
message = "Hello, World!"
encoded_message = base64.b64encode(message.encode("utf-8"))
print(encoded_message)
# 解码
decoded_message = base64.b64decode(encoded_message).decode("utf-8")
print(decoded_message)
2. URL解码器:
import urllib.parse
# 编码
url = "https://www.example.com/?q=Python编程"
encoded_url = urllib.parse.quote(url)
print(encoded_url)
# 解码
decoded_url = urllib.parse.unquote(encoded_url)
print(decoded_url)
3. HTML解码器:
import html
# 编码
html_text = "<h1>Hello, World!</h1>"
encoded_html = html.escape(html_text)
print(encoded_html)
# 解码
decoded_html = html.unescape(encoded_html)
print(decoded_html)
4. JSON解码器:
import json
# 编码
json_data = {"name": "John", "age": 30}
encoded_json = json.dumps(json_data)
print(encoded_json)
# 解码
decoded_json = json.loads(encoded_json)
print(decoded_json)
5. XML解码器:
import xml.etree.ElementTree as ET
# 编码
root = ET.Element("root")
child1 = ET.SubElement(root, "child1")
child1.text = "Hello"
child2 = ET.SubElement(root, "child2")
child2.text = "World!"
xml_data = ET.tostring(root).decode("utf-8")
print(xml_data)
# 解码
parsed_xml = ET.fromstring(xml_data)
print(parsed_xml.tag)
6. ROT13解码器:
import codecs
# 编码
message = "Hello, World!"
encoded_message = codecs.encode(message, "rot_13")
print(encoded_message)
# 解码
decoded_message = codecs.decode(encoded_message, "rot_13")
print(decoded_message)
7. ASCII码解码器:
# 编码
text = "Hello, World!"
encoded_text = "".join(str(ord(c)) for c in text)
print(encoded_text)
# 解码
decoded_text = "".join(chr(int(encoded_text[i:i+3])) for i in range(0, len(encoded_text), 3))
print(decoded_text)
8. Morse码解码器:
MORSE_CODE = {
"A": ".-", "B": "-...", "C": "-.-.", "D": "-..", "E": ".", "F": "..-.", "G": "--.", "H": "....", "I": "..", "J": ".---",
"K": "-.-", "L": ".-..", "M": "--", "N": "-.", "O": "---", "P": ".--.", "Q": "--.-", "R": ".-.", "S": "...", "T": "-",
"U": "..-", "V": "...-", "W": ".--", "X": "-..-", "Y": "-.--", "Z": "--.."
}
# 编码
message = "HELLO, WORLD!"
encoded_message = " ".join(MORSE_CODE.get(c.upper(), "") for c in message)
print(encoded_message)
# 解码
decoded_message = "".join(key for value in encoded_message.split(" ") for key, val in MORSE_CODE.items() if val == value)
print(decoded_message)
9. Huffman编码解码器:
from heapq import heappush, heappop, heapify
from collections import defaultdict
import sys
def encode(text):
frequency = defaultdict(int)
for character in text:
frequency[character] += 1
heap = [[weight, [key, ""]] for key, weight in frequency.items()]
heapify(heap)
while len(heap) > 1:
lo = heappop(heap)
hi = heappop(heap)
for pair in lo[1:]:
pair[1] = "0" + pair[1]
for pair in hi[1:]:
pair[1] = "1" + pair[1]
heappush(heap, [lo[0] + hi[0]] + lo[1:] + hi[1:])
return sorted(heappop(heap)[1:], key=lambda p: (len(p[-1]), p))
def decode(encoded, codes):
reverse = {code: char for char, code in codes}
bitstream = ""
decoded_text = ""
for bit in encoded:
bitstream += bit
if bitstream in reverse:
decoded_text += reverse[bitstream]
bitstream = ""
return decoded_text
text = "HELLO, WORLD!"
huffman_codes = encode(text)
print(huffman_codes)
encoded = "".join(code for char, code in huffman_codes)
decoded = decode(encoded, huffman_codes)
print(decoded)
10. Caesar解码器:
def caesar_encode(text, shift):
encoded_text = ""
for char in text:
if char.isalpha():
ascii_offset = ord("A") if char.isupper() else ord("a")
encoded_char = chr((ord(char) - ascii_offset + shift) % 26 + ascii_offset)
encoded_text += encoded_char
else:
encoded_text += char
return encoded_text
def caesar_decode(encoded_text, shift):
return caesar_encode(encoded_text, -shift)
text = "HELLO, WORLD!"
shift = 3
encoded = caesar_encode(text, shift)
print(encoded)
decoded = caesar_decode(encoded, shift)
print(decoded)
11. Rail Fence解码器:
def rail_fence_encode(text, rails):
fence = [[None] * len(text) for _ in range(rails)]
rail = 0
direction = 1
for char in text:
fence[rail] = char
rail += direction
if rail == rails - 1 or rail == 0:
direction *= -1
encoded_text = "".join(char for rail in fence for char in rail if char is not None)
return encoded_text
def rail_fence_decode(encoded_text, rails):
fence = [[None] * len(encoded_text) for _ in range(rails)]
rail = 0
direction = 1
for char in encoded_text:
fence[rail] = "@"
rail += direction
if rail == rails - 1 or rail == 0:
direction *= -1
index = 0
for rail in range(rails):
for pos in range(len(encoded_text)):
if fence[rail][pos] == "@":
fence[rail][pos] = encoded_text[index]
index += 1
rail = 0
direction = 1
decoded_text = ""
for _ in range(len(encoded_text)):
decoded_text += fence[rail].pop(0)
rail += direction
if rail == rails - 1 or rail == 0:
direction *= -1
return decoded_text
text = "HELLO, WORLD!"
rails = 3
encoded = rail_fence_encode(text, rails)
print(encoded)
decoded = rail_fence_decode(encoded, rails)
print(decoded)
12. Morse码解码器 (使用外部库 morse):
import morse
# 编码
message = "HELLO, WORLD!"
encoded_message = morse.encode(message)
print(encoded_message)
# 解码
decoded_message = morse.decode(encoded_message)
print(decoded_message)
13. 国际信号码解码器:
import pyttsx3
# 编码
message = "HELLO, WORLD!"
encoded_message = pyttsx3.init()
encoded_message.save_to_file(message, "encoded_message.wav")
encoded_message.runAndWait()
# 解码
decoded_message = pyttsx3.init()
decoded_message.setProperty("rate", 150)
decoded_message.setProperty("volume", 0.8)
decoded_message.say("encoded_message.wav")
decoded_message.runAndWait()
14. 摩尔斯电码解码器 (使用外部库 winsound):
import winsound
# 编码
morse_code = {"A": ".-", "B": "-...", "C": "-.-.", "D": "-..", "E": ".", "F": "..-.", "G": "--.", "H": "....", "I": "..", "J": ".---",
"K": "-.-", "L": ".-..", "M": "--", "N": "-.", "O": "---", "P": ".--.", "Q": "--.-", "R": ".-.", "S": "...", "T": "-",
"U": "..-", "V": "...-", "W": ".--", "X": "-..-", "Y": "-.--", "Z": "--.."}
frequency = 550
duration = 200
message = "HELLO, WORLD!"
encoded_message = [morse_code.get(char.upper(), "") for char in message]
for code in encoded_message:
for dot_or_dash in code:
if dot_or_dash == ".":
winsound.Beep(frequency, duration)
elif dot_or_dash == "-":
winsound.Beep(frequency, duration * 3)
else:
continue
winsound.Sleep(duration)
winsound.Sleep(duration * 2)
15. ASCII码解码器 (使用外部库 pyfiglet):
import pyfig
