最近我发现了一个很有意思的程序!
这个程序可以将你输入的中文转化成摩斯密码,还可以通过这个摩斯密码再转化成你输入的中文,是不是特别神奇?
我第一时间分析了这个程序,我尝试用把中文借助pypinyin模块转化成拼音,可是中华文化,博大精深,不可能再将拼音转成中文,因为同音字太多了!我到网上细看了看,感谢知乎”吱你太美“的楼主让我开窍!(原链接楼主如下)
我们可以考虑以下步骤来实现中文到摩斯码的转换:
- 中文到Unicode编码:首先将中文字符转换为它们对应的Unicode编码。
- Unicode编码到摩斯码:然后将这些Unicode编码转换为摩斯码表示。
- 摩斯码到Unicode编码:在解密时,先将摩斯码转换回Unicode编码。
- Unicode编码到中文:最后将Unicode编码转换回中文字符
wow~这样有没有很简单?前端python代码如下:
from flask import Flask, request, jsonify
from flask_cors import CORS
import logging
# 设置日志记录
logging.basicConfig(level=logging.INFO)
app = Flask(__name__)
CORS(app) # 允许所有来源的请求,生产环境中应更具体地配置
# 摩斯密码映射表(仅包含基本字符)
morse_code_map = {
'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': '--..', '0': '-----', '1': '.----', '2': '..---', '3': '...--', '4': '....-',
'5': '.....', '6': '-....', '7': '--...', '8': '---..', '9': '----.', '.': '.-.-.-', ',': '--..--',
'?': '..--..', '\'': '.----.', '!': '-.-.--', '/': '-..-.', '(': '-.--.', ')': '-.--.-', '&': '.-...',
':': '---...', ';': '-.-.-.', '=': '-...-', '+': '.-.-.', '-': '-....-', '_': '..--.-', '"': '.-..-.',
'$': '...-..-', '@': '.--.-.'
}
reverse_morse_code_map = {v: k for k, v in morse_code_map.items()}
def unicode_to_morse(unicode_str):
"""将中文字符转换为摩斯码"""
morse_parts = []
for char in unicode_str:
code_point = format(ord(char), 'X') # 获取字符的Unicode码点并转换为十六进制字符串
for digit in code_point:
if digit.lower() in morse_code_map:
morse_parts.append(morse_code_map[digit.lower()])
else:
morse_parts.append('?') # 对于无法映射的字符使用问号表示
morse_parts.append(' ') # 码点之间用空格分隔
return ' '.join(morse_parts).strip()
def morse_to_unicode(morse_str):
"""将摩斯码转换回中文字符"""
unicode_parts = []
morse_digits = morse_str.split()
for i in range(0, len(morse_digits), 4):
code_point_digits = morse_digits[i:i+4]
hex_code_point = ''.join([reverse_morse_code_map.get(digit, '?') for digit in code_point_digits])
if len(hex_code_point) == 4 and all(c in '0123456789abcdefABCDEF' for c in hex_code_point):
try:
unicode_char = chr(int(hex_code_point, 16))
unicode_parts.append(unicode_char)
except ValueError:
unicode_parts.append('[?]') # 解码失败时用[?]表示
else:
unicode_parts.append('[?]')
return ''.join(unicode_parts)
@app.route('/translate', methods=['POST', 'OPTIONS'])
def translate():
if request.method == 'OPTIONS':
# 预检请求,直接返回200状态码
return '', 200
data = request.get_json()
action = data.get('action')
text = data.get('text')
if not text or not action:
return jsonify({'error': '请提供文本和操作类型'}), 400
try:
if action == 'encrypt':
result = unicode_to_morse(text)
elif action == 'decrypt':
result = morse_to_unicode(text)
else:
return jsonify({'error': '未知的操作类型'}), 400
return jsonify({'result': result})
except Exception as e:
logging.error(f"翻译过程中出错: {str(e)}")
return jsonify({'error': '服务器内部错误,请检查输入或稍后再试'}), 500
if __name__ == '__main__':
app.run(host='0.0.0.0', port=8080, debug=True)
这里大家需要安装flask模块,运行命令如下:
#Linux
pip3 install flask -i https://pypi.tuna.tsinghua.edu.cn/simple/
#Windows
pip install flask -i https://pypi.tuna.tsinghua.edu.cn/simple/
除安装模块外,大家如果再服务器中运行,还需要保证安全组放行8080端口,接下来我们开始HTML部分,我们在运行时,我们直接进入这个HTML部分就可以了
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>中文与摩斯密码互转</title>
<style>
body {
font-family: Arial, sans-serif;
padding: 20px;
}
textarea {
width: 100%;
height: 150px;
margin-bottom: 10px;
}
button {
padding: 10px 20px;
background-color: #007BFF;
color: white;
border: none;
cursor: pointer;
margin-right: 10px;
}
button:hover {
background-color: #0056b3;
}
</style>
</head>
<body>
<h1>中文与摩斯密码互转</h1>
<textarea id="inputText" placeholder="请输入中文或摩斯密码"></textarea>
<button id="encryptButton">加密 (中文 → 摩斯)</button>
<button id="decryptButton">解密 (摩斯 → 中文)</button>
<textarea id="outputText" readonly></textarea>
<script>
// 定义translate函数
function translate(action) {
const inputText = document.getElementById('inputText').value;
fetch('http://113.44.153.114:8080/translate', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({ action: action, text: inputText })
})
.then(response => {
if (!response.ok) {
throw new Error('网络响应失败');
}
return response.json();
})
.then(data => {
if (data.result) {
document.getElementById('outputText').value = data.result;
} else if (data.error) {
alert(data.error);
} else {
alert('未知错误');
}
})
.catch(error => {
console.error('请求出错:', error);
alert('请求出错,请检查网络连接或稍后再试');
});
}
// 使用事件监听器绑定按钮点击事件
document.addEventListener('DOMContentLoaded', () => {
document.getElementById('encryptButton').addEventListener('click', () => translate('encrypt'));
document.getElementById('decryptButton').addEventListener('click', () => translate('decrypt'));
});
</script>
</body>
</html>
其中大家在fetch()里的IP地址需要切换成大家实际的IP地址!这个非常重要,缺之一步都会报错!
OKK接下来开始代码正确载入后的操作:
一、启动python脚本
终端进入放入python前端的文件夹(可以使用cd等命令)
python app.py
”app.py“是你python文件的文件名,如果跟我的不一样,需要替换成自己的
和上一样,没有任何报错说明启动成功!如果python脚本启动成功,进入HTML文件时下面的破译内容加载不出来,可以按”F12“或者右键网页空白页面点击检查,点击下类似的标识查看具体报错信息查询
大家有遇到什么问题可以在评论区留言,我虽然不会及时,但是也会尽量回复哒!
本期就到这里,再见~