尝试用python做音频的LSB隐藏算法,过程是曲折的,虽然结果还有一些瑕疵,毕竟对音频的信号处理还不太熟练,不过结果总算是成功了。

1.环境

win10操作系统、pycharm编辑器、python3.9、第三方库:librosa、bitarray

1.1安装bitarray

之所以选择安装bitarray是为了解决中英文字符串和二进制字符串的转化问题

pip install bitarray

1.2安装librosa

它是一个Python模块,通常用于分析音频信号,但更倾向于音乐。它包括用于构建MIR(音乐信息检索)系统的nuts 和 bolts。

pip install librosa

2.转码函数

def str2bitarray(s):s.replace(r'\n', '')ret = bitarray(''.join([bin(int('1' + hex(c)[2:], 16))[3:] for c in s.encode('utf-8')]))return retdef bitarray2str(bit):bit = bitarray(bit)print(bit)return bit.tobytes().decode('utf-8')

str2bitarray()函数:作用是将文本文件中读取出字符串转码为二进制字符串

bitarray2str()函数:作用是将解密后的二进制字符串转码为明文

3. 原理

上述是图像的lsb隐藏算法,音频也是类似的

一言以蔽之,假如某个音频的采样点为32位float类型,那么替换掉其中一些不太重要的位置,对音频的影响不大,极难发现。如0.005689改为0.005680。

4.算法实现

import librosa
from bitarray import bitarray
import soundfile as sf
import numpy as npbit_float = {'00': 0.000001, '01': 0.000002, '10': 0.000003, '11': 0.000004}
float_bit = {8:'00',9:'00',10:'00',11:'00',18:'01',19:'01',20:'01',21:'01',28:'10',29:'10',30:'10',31:'10',38:'11',39:'11',40:'11',41:'11'}def str2bitarray(s):s.replace(r'\n', '')ret = bitarray(''.join([bin(int('1' + hex(c)[2:], 16))[3:] for c in s.encode('utf-8')]))return retdef bitarray2str(bit):bit = bitarray(bit)print(bit)return bit.tobytes().decode('utf-8')def bit2float(bit):if bit.to01() in bit_float.keys():return bit_float[bit.to01()]def float2bit(float):if float in bit_float.values():for key, value in bit_float.items():if float == value:return keydef LSB(audiofile, hidefile):data, sr = librosa.load(audiofile)#隐藏的文本infor = ''with open(hidefile, 'rb') as f:infor = str2bitarray(f.read().decode('utf-8'))start = 0end = 2for i in range(len(infor)):if bit2float(infor[start:end]) == None:breakdata[i] = data[i] + bit2float(infor[start:end])start += 2end += 2#librosa.output.write_wav(r'C:\Users\adins\Desktop\example.wav', data)sf.write(r'C:\Users\adins\Desktop\example.wav', data,samplerate=sr, subtype='PCM_24')def UNLSB(audiofile , hidedfile):data, sr = librosa.load(audiofile)hidedata , sr1 = librosa.load(hidedfile)infor = ''for i in range(len(data)):item = int((hidedata[i] - data[i])*10000000)if item in float_bit.keys():infor = infor + float_bit[item]if item < 5:breakinfor = bitarray2str(infor)with open(r'..\2.txt', 'w') as f:f.write(infor)LSB(r'C:\Users\adins\Desktop\0020a.wav', r'C:\Users\adins\Desktop\1.txt')
UNLSB(r'C:\Users\adins\Desktop\0020a.wav', r'C:\Users\adins\Desktop\example.wav')

LSB('音频载体_WAV格式',’密文‘):加密函数

UNLSB('加密前音频',’加密后的音频‘):解密函数

4.1 缺陷

由于python没有指针,故没有好办法来对float型采样点做某一位上的操作,这里采用的是投机取巧的办法,定义了一个字典bit_float = {'00': 0.000001, '01': 0.000002, '10': 0.000003, '11': 0.000004}

使得将每两位二进制转化为float型与原采样点相加,再用原采样点与加密后的采样点的差值作为提取时的判断标准。这样带来的缺点十分明显,第一解密时需要与原载体做对比才能导出明文,第二,由于是做的float型加法,所得为近似值,不够稳定,第三这种不是对某些位的操作会造成信息的利用率不高,嵌入容量低。

为了解决float型加减时为近似计算的弊端,在用隐藏信息的采样点减去原采样点时*10000000

int((hidedata[i] - data[i])*10000000)转为整数,取8、9、10、11近似为10,18、19、20、21近似为20,28、29、30、31近似为30。创建一个字典用来做转换

float_bit = {8:'00',9:'00',10:'00',11:'00',18:'01',19:'01',20:'01',21:'01',28:'10',29:'10',30:'10',31:'10',38:'11',39:'11',40:'11',41:'11'}

即差值*10000000为10的对应二进制’00‘,这也算做了一种编码`~`。

4.2加密对比

加密前后的波形图无明显区别

测试中英文均可行。

librosa_test.py-系统安全文档类资源-CSDN下载

信息隐藏—音频隐藏LSB算法相关推荐

  1. 实战28:数字图像可视化水印系统的设计与实现(LSB算法、DCT算法、随机间隔算法、区域校验位算法、图像降级算法、图像降级算法改进等6种数字水印算法的实现)

    基于数字图像的可视化水印系统按照水印算法的不同主要分为空间域水印和变换域水印两大类.空间域水印以 LSB 算法--最低有效位算法为代表,变换域水印以 DCT 算法--离散余弦变换算法为代表[10]. ...

  2. 利用MATLAB实现WAV音频的LSB信息隐藏

    0. 背景 音频信息隐藏技术就是将秘密数据直接嵌入音频载体中,但不影响原载体的使用价值,也不容易被人的知觉系统觉察或注意到. 音频信息隐藏技术作为信息隐藏技术的一个重要分支,受到越来越多的关注. 近年 ...

  3. 【图像隐藏】基于DCT算法实现数字水印嵌入+检测+攻击含Matlab源码

    1 简介 介绍了数字水印的产生.发展及其应用,讨论了数字水印的分类,提出了图像的预处理思想,利用MATLAB中的剪切函数.缩放函数,以及调整图像直方图的方法对图像进行预处理,并用MATLAB进行了仿真 ...

  4. 苹果隐藏app_iOS14隐藏功能,很实用!附部分BUG解决方案

    昨日早些时候,苹果发布了新的iOS14,带来了一众的有趣新功能,详见:iOS14新功能一览:附描述文件. 受篇幅及时效性的限制,我们也只在推送中分享了部分新功能,后经实际体验我们又有了一些有趣的新发现 ...

  5. css溢出隐藏 /超出隐藏(补充CSS样式穿透 scoped 问题)

    1.单行文本 - 溢出隐藏/过长隐藏/超出隐藏 div {overflow:hidden; //超出的文本隐藏text-overflow:ellipsis; //用省略号显示white-space:n ...

  6. 飞利浦公司音频指纹识别算法解析

    飞利浦公司音频指纹识别算法解析 一个音频指纹系统通常包括两个部分:即一个计算听觉重要特征的指纹提取算法和一个在指纹数据库中进行有效搜索的比对算法.当要识别一段未知音频时,首先按照指纹提取算法计算其音频 ...

  7. 初识推荐算法---算法背景、算法概念介绍、推荐信息选取、常用推荐算法简介

    初识推荐算法 算法背景 推荐系统的基本概念 哪些信息可以用于推荐 常用的推荐系统算法 算法背景 推荐系统是根据用户的浏览习惯,确定用户的兴趣,通过发掘用户的行为,将合适的信息推荐给用户,满足用户的个性 ...

  8. js(jquery)鼠标移入移出事件时,出现闪烁、隐藏显示隐藏显示不停切换的情况

    <script> $(".guanzhu").hover(function(){$(".weixinTop").show();},function( ...

  9. SHARC音频DSP的算法详解(七)Reverb Delay混响和回声效果的实现及代码详解

    作者的话 延时是非常常见的一种音频上的算法,而在ADI的SAHRC DSP中,可以很好的去实现,我们来看看是怎么做的. 硬件准备 ADSP-21489EVB:ADI 21489 DSP的开发板 AD- ...

最新文章

  1. 在Ubuntu 14.04 64bit上编译安装xbt tracker
  2. python推荐系统-利用python构建一个简单的推荐系统
  3. 字节流练习:图片复制
  4. MySQL WHERE:条件查询
  5. 能pingt通外部的Ip和dns,但上不了网络
  6. Java注释--单行注释、多行注释、文档注释
  7. 引入 javascript_在您JavaScript项目中引入类型安全性? 再想一想
  8. IPSEC ×××需要解决的路由问题及影响IPSEC ×××的网络问题
  9. lolcat :一个在 Linux 终端中输出彩虹特效的命令行工具
  10. 遥感数字图像处理 初体验
  11. Mybatis-第N篇配置log4j1、log4j2打印执行的sql语句
  12. Unity 3D 文件导入出错误解决方法以及unity圣典离线版下载地址
  13. 武汉大学计算机研究生导师,武汉大学计算机学院导师简介-丁立新
  14. Python爬虫实现突破百度文库限制
  15. 快速学习四步法:如何用20小时,快速学习
  16. python 008 __ 小斌文档 | 元组
  17. body 没有被撑开_为什么父div没有被撑开
  18. “一招定制LaTeX论文目录页教程“【新手速进】
  19. 链安团队漏洞分析连载(第一期)一一溢出漏洞
  20. 获取JOP卡的版本与功能信息

热门文章

  1. 锂电池标3.7V或4.2V的区别
  2. matlab2阶系统,基于Matlab/Simulink的二阶控制系统仿真研究
  3. 对BRDF模型的自我理解
  4. 【bosun】查询表达式
  5. VisualGDB编译关键参数设置
  6. 如何计算 R 中的变异系数
  7. Python——特点(优点缺点)
  8. vscode安装python扩展并开展远程调试的过程
  9. 利用scrapyd管理scrapy的多个爬虫
  10. 三坐标程序是C语言,三坐标程序编写系统及方法