疑似全网最全!中文与摩斯密码互加密解密程序!

最近我发现了一个很有意思的程序!

这个程序可以将你输入的中文转化成摩斯密码,还可以通过这个摩斯密码再转化成你输入的中文,是不是特别神奇?

我第一时间分析了这个程序,我尝试用把中文借助pypinyin模块转化成拼音,可是中华文化,博大精深,不可能再将拼音转成中文,因为同音字太多了!我到网上细看了看,感谢知乎”吱你太美“的楼主让我开窍!(原链接楼主如下)

摩斯密码是如何把中文直接翻译的? - 知乎

我们可以考虑以下步骤来实现中文到摩斯码的转换:

  1. 中文到Unicode编码:首先将中文字符转换为它们对应的Unicode编码。
  2. Unicode编码到摩斯码:然后将这些Unicode编码转换为摩斯码表示。
  3. 摩斯码到Unicode编码:在解密时,先将摩斯码转换回Unicode编码。
  4. 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“或者右键网页空白页面点击检查,点击下类似的标识查看具体报错信息查询

大家有遇到什么问题可以在评论区留言,我虽然不会及时,但是也会尽量回复哒!

体验网页

本期就到这里,再见~

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值