iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >使用 Python 从音频中提取摩斯密码
  • 659
分享到

使用 Python 从音频中提取摩斯密码

python音视频开发语言笔记 2023-10-23 10:10:30 659人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

本人并非专业人士,在部分专业名词的表述上可能会出现错误,敬请谅解 前段时间在 BugKu 做题时碰到了这么一题 铁子,来一道 - Bugku CTF (WriteUp 可见同学的博客 【BugK

本人并非专业人士,在部分专业名词的表述上可能会出现错误,敬请谅解

前段时间在 BugKu 做题时碰到了这么一题 铁子,来一道 - Bugku CTF
(WriteUp 可见同学的博客 【BugKu】铁子,来一道_s1ameseL的博客-CSDN博客)
在解题过程中有一步,需要从音频中提取出摩斯密码。看了同学写的 WriteUp 后,我突发奇想,决定写一个自动从音频中提取摩斯密码的程序,于是就有了这么个工具

GitHub地址: https://github.com/CrystalMoling/MorseAudioDecoder

编写过程

1.载入音频

在这里使用的是 pythonwave

# 加载音频audio = wave.open(sys.argv[1], 'rb')# 读音频信息params = audio.getparams()print(params)n_channels, _, sample_rate, n_frames = params[:4]# 读频谱信息str_wave_data = audio.readframes(n_frames)audio.close()# 将频谱信息转为数组wave_data = np.frombuffer(str_wave_data, dtype=np.short).T

2.提取数据

计算出横轴的时间轴后,使用 pylab 库绘制频谱图像

time = np.arange(0, n_frames) * (1.0 / sample_rate)pylab.plot(time, wave_data)pylab.show()

结果如下
pylab 绘制的频谱图片
对于如何区分长(“-”)与短(“.”),我想到的方法是计算出所有信号的平均长度,大于平均长度的即为长(“-”)

# 计算平均频率wave_avg = int(sum([abs(x / 10) for x in wave_data]) / len(wave_data))

在此处有个小插曲,由于音频的波形呈现正弦型,所以在带有信息的区域也会出现频率值为0的情况,最终生成的数据也无法转换为摩斯密码
正弦型的波形
后来在 Python 波形处理_Rone-X的博客-CSDN博客 这篇博客中发现可以取一段区域内的平均值
比较代码如下,使用了 tqdm 库显示绘制进度

# 绘制摩斯图像morse_block_sum = 0  # 待划分的数据morse_block_length = 0  # 待划分的数据长度morse_arr = []time_arr = []pbar = tqdm(wave_data, desc="Drawing Morse Image")for i in pbar:    # 高于平均值记为 1 ,反之为 0    if abs(i) > wave_avg:        morse_block_sum += 1    else:        morse_block_sum += 0    morse_block_length += 1    # 将数据按照指定长度划分    if morse_block_length == 100:        # 计算划分块的平均值        if math.sqrt(morse_block_sum / 100) > 0.5:            morse_arr.append(1)        else:            morse_arr.append(0)        # 横坐标        time_arr.append(len(time_arr))        morse_block_length = 0        morse_block_sum = 0

最后生成的图像如下
最终生成的图像
接着取出 0 位和 1 位的长度信息

# 摩斯电码 按信号长度存储morse_type = []morse_len = []# 摩斯电码长度     0  1morse_obj_sum = [0, 0]morse_obj_len = [0, 0]for i in morse_arr:    if len(morse_type) == 0 or morse_type[len(morse_type) - 1] != i:        morse_obj_len[i] += 1        morse_obj_sum[i] += 1        morse_type.append(i)        morse_len.append(1)    else:        morse_obj_sum[i] += 1        morse_len[len(morse_type) - 1] += 1# 计算信息与空位的平均长度morse_block_avg = morse_obj_sum[1] / morse_obj_len[1]morse_blank_avg = morse_obj_sum[0] / morse_obj_len[0]

与平均长度比较

# 转换为摩斯电码morse_result = ""for i in range(len(morse_type)):    if morse_type[i] == 1:        # 大于平均长度为"-"        if morse_len[i] > morse_block_avg:            morse_result += "-"        # 小于平均长度即为"."        elif morse_len[i] < morse_block_avg:            morse_result += "."    # 大于平均空位长度的为分割    elif morse_type[i] == 0:        if morse_len[i] > morse_blank_avg:            morse_result += "/"

3.解码数据

使用如下字典解码

morse_dict = {    '.-': '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',    '.----': '1', '..---': '2', '...--': '3', '....-': '4', '.....': '5',    '-....': '6', '--...': '7', '---..': '8', '----.': '9', '-----': '0',    '.-.-.-': '.', '---...': ':', '--..--': ',', '-.-.-.': ';', '..--..': '?',    '-...-': '=', '.----.': '\'', '-..-.': '/', '-.-.--': '!', '-....-': '-',    '..--.-': '_', '.-..-.': '"', '-.--.': '(', '-.--.-': ')', '...-..-': '$',    '.--.-.': '@'}
# 摩斯电码解码morse_array = morse_result.split("/")plain_text = ""for morse in morse_array:    plain_text += morse_dict[morse]

plain_text 变量中即为解码后的数据

验证

运行结果

参考:
利用python自动解析摩斯电码音频文件_如何从音频中提取摩斯密码_Rabbit_Gray的博客-CSDN博客
使用Python绘制语音信号的波形图_python画信号图_进击的小杨人的博客-CSDN博客
Python 波形处理_Rone-X的博客-CSDN博客

来源地址:https://blog.csdn.net/AnKores/article/details/131138260

--结束END--

本文标题: 使用 Python 从音频中提取摩斯密码

本文链接: https://www.lsjlt.com/news/440238.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 使用 Python 从音频中提取摩斯密码
    本人并非专业人士,在部分专业名词的表述上可能会出现错误,敬请谅解 前段时间在 BugKu 做题时碰到了这么一题 铁子,来一道 - Bugku CTF (WriteUp 可见同学的博客 【BugK...
    99+
    2023-10-23
    python 音视频 开发语言 笔记
  • 利用Python破解摩斯密码
    目录摩尔斯电码Python实现摩斯密码对照表加密解密测试完整代码总结在电影《无间道》中,刘建明(刘德华饰)作为黑帮的卧底在一次行动中发现了警察的卧底陈永仁(梁朝伟饰)与黄警督(黄秋生...
    99+
    2024-04-02
  • Python从视频中提取音频的操作
    简介 OpenCV中使用VideoCapture类写的视频是没有音频的,如果要进一步处理音频则需要用到一个库——MoviePy,这个库是Python视频编辑库,可裁剪、拼接、标题插入...
    99+
    2024-04-02
  • 如何利用Python破解摩斯密码
    这篇文章将为大家详细讲解有关如何利用Python破解摩斯密码,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。摩尔斯电码摩斯密码的定义如下:摩尔斯电码( 又译为摩斯密码,英语:Morse code)是一种时通...
    99+
    2023-06-29
  • Python从视频中提取音频的操作方法
    这篇文章给大家分享的是有关Python从视频中提取音频的操作方法的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。简介OpenCV中使用VideoCapture类写的视频是没有音频的,如果要进一步处理音频则需要用到一...
    99+
    2023-06-14
  • 怎么在Linux系统中从视频中提取音频
    本篇文章为大家展示了怎么在Linux系统中从视频中提取音频,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。方法如下:首先安装mencoder.对于Ubuntu来说,软件仓库里就有mencoder,可直...
    99+
    2023-06-07
  • python 提取视频中的音频工具类详解
    前言 利用Python的ffmpy库提取视频中的音频。本文提供工具类代码。 环境依赖 需要安装ffmpy,安装指令: pip install ffmpy -i https:/...
    99+
    2024-04-02
  • 使用Python怎么爬取MP3音频
    使用Python怎么爬取MP3音频?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。r: play/getdatacallback: jQuery19108...
    99+
    2023-06-06
  • Python快速从视频中提取视频帧的方法详解
    目录1、抽取视频帧2、多线程方法3、整体代码补充Python快速提取视频帧(多线程) 今天介绍一种从视频中抽取视频帧的方法,由于单线程抽取视频帧速度较慢,因此这里我们增加了多线程的方...
    99+
    2024-04-02
  • 怎么使用Python爬取抖音APP视频
    这篇文章主要讲解了“怎么使用Python爬取抖音APP视频”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么使用Python爬取抖音APP视频”吧!记录一下如何用python爬取app数据,...
    99+
    2023-06-15
  • 使用Python怎么在m3u8文件中提取视频
    这期内容当中小编将会给大家带来有关使用Python怎么在m3u8文件中提取视频,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1. HLS协议与m3u8文件  HLS,即 H T T P   L ...
    99+
    2023-06-15
  • 如何使用Python从字符串中提取数字?
    在Python中,有时候需要从字符串中提取特定的数字信息,这种操作很常见。例如,从一篇新闻报道中提取新闻发布日期、从一篇小说中提取章节编号等。那么,如何使用Python从字符串中提取数字呢?本文将介绍几种方式。 阅读更多:Python...
    99+
    2023-08-31
    mysql 数据库 python
  • 教你使用Python提取视频中的美女图片
    目录前言安装模块you-getOpenCV结束前言 人类都是视觉动物,不管是男生还是女生看到漂亮的小姐姐、小哥哥就想截图保存下来。可是截图会对画质会产生损耗,截取的 画面不规整,像素...
    99+
    2024-04-02
  • 教你使用Python从文件中提取IP地址
    目录算法 :  代码输出 :代码:输出 :补充:python提取一段字符串中的ip地址总结让我们看看如何使用 Python 从文件中提取 IP 地址。 算法 :&...
    99+
    2024-04-02
  • 如何使用Python提取Chrome浏览器保存的密码
    由于Chrome会将大量浏览数据本地保存磁盘中,在本教程中,我们将编写 Python 代码来提取 Windows 计算机上 Chrome 中保存的密码。 首先,让我们安装所需的库: ...
    99+
    2024-04-02
  • 怎么使用Python提取Chrome浏览器保存的密码
    小编给大家分享一下怎么使用Python提取Chrome浏览器保存的密码,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!由于Chrome会将大量浏览数据本地保存磁盘中,在本教程中,我们将编写 Python 代码来提取 Wind...
    99+
    2023-06-15
  • 怎么使用Python爬取QQ密码
    非法获取他人的账号密码是违法行为,并且严重侵犯了他人的隐私权。强烈不建议或支持这样的行为。爬取QQ密码是非法的,且侵犯了个人隐私。违...
    99+
    2023-08-31
    Python
  • 怎么在python中使用DOS获取wifi密码
    怎么在python中使用DOS获取wifi密码?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。CMD命令获取电脑里配置过的wifi信息按下win+R键,输入CMD...
    99+
    2023-06-14
  • Python使用PyAV提取视频关键帧的实践
    目录1.软件环境⚙️2.问题描述...
    99+
    2024-04-02
  • Python中怎么使用Jieba进行词频统计与关键词提取
    这篇文章主要介绍“Python中怎么使用Jieba进行词频统计与关键词提取”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Python中怎么使用Jieba进行词频统计与关键词提取”文章能帮助大家解决问...
    99+
    2023-07-05
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作