75 lines
1.9 KiB
Python
Raw Permalink Normal View History

# NyaCode
import base64
import random
NyaCodeCharset = ["", "", "?", "~"]
NyaCodeSpecialCharset = ["", "!", "...", ".."]
NyaCodeEncode = {}
for i in range(64):
triplet = ""
for j in range(3):
index = (i // (4**j)) % 4
triplet += NyaCodeCharset[index]
if i < 26:
char = chr(65 + i) # 大写字母 A-Z
elif i < 52:
char = chr(97 + (i - 26)) # 小写字母 a-z
elif i < 62:
char = chr(48 + (i - 52)) # 数字 0-9
elif i == 62:
char = chr(43) # 特殊字符 +
else:
char = chr(47) # 特殊字符 /
NyaCodeEncode[char] = triplet
NyaCodeDecode = {value: key for key, value in NyaCodeEncode.items()}
async def nya_encrypt(msg: str):
result = ""
b64str = base64.b64encode(msg.encode()).decode().replace("=", "")
nyastr = ""
for b64char in b64str:
nyastr += NyaCodeEncode[b64char]
for char in nyastr:
if char == "" and random.random() < 0.5:
result += "!"
if random.random() < 0.25:
result += random.choice(NyaCodeSpecialCharset) + char
else:
result += char
return result
async def nya_decrypt(msg: str):
msg = msg.replace("", "").replace("!", "").replace(".", "")
nyastr = []
i = 0
if len(msg) % 3 != 0:
return "这句话不是正确的猫语"
while i < len(msg):
nyachar = msg[i : i + 3]
try:
if all(char in NyaCodeCharset for char in nyachar):
nyastr.append(nyachar)
i += 3
except Exception:
return "这句话不是正确的猫语"
b64str = ""
for nyachar in nyastr:
b64str += NyaCodeDecode[nyachar]
b64str += "=" * (4 - len(b64str) % 4)
try:
result = base64.b64decode(b64str.encode()).decode()
except Exception:
return "翻译失败"
return result