基于最低有效位的音频信息隐藏算法(JAVA).docxVIP

基于最低有效位的音频信息隐藏算法(JAVA).docx

  1. 1、本文档共12页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于最低有效位的音频信息隐藏算法(JAVA)

目的实现基于最低有效位的音频数字水印程序,能够在音频中添加水印信息、识别并读取音频中的水印信息、加密嵌入水印。实验设备及条件运行Windows 7 操作系统计算机一台Eclipse软件一套设计思想添加水印信息以字节为单位读取wav音频,并按照格式结构提取格式内容定位数据区,计算数据区长度,进而计算最多能嵌入水印长度和嵌入间隔通过随机数生成函数,来产生一系列随机步进值,进而确定信息嵌入点将密码作为随机数生成函数的种子,不同种子会产生相同的随机序列,达到保密效果将待嵌入的水印信息进行字节化,通过位运算分解为8位二进制,再通过位运算将每一位存储至信息嵌入点的最低位利用wav文件的附加信息字节(偏移量0x24和0x25),一般wav文件不会使用这个附加信息字节,所以可以将水印长度保存到其中,然后修改附加信息标志位(偏移量0x10)保存修改后的wav文件识别水印信息读取wav文件的附加信息标志位标志位内容若为0x10,则说明附加信息为空,未添加水印标志位内容若为0x12,则说明有附加信息,位置在偏移量0x24和0x25,内容为水印长度读取水印信息读取wav文件,定位数据区利用密码产生与嵌入水印时相同的随机序列,定位信息嵌入点利用位运算,读取信息嵌入点的二进制最低位连续读取8个二进制最低位之后可以还原出一个字节的水印信息循环,直到读取完记录的水印长度为止组合水印字节,还原水印信息安全性设计虽然利用附加信息位保存水印长度很明显,但是由于信息嵌入点的序列是由密码产生的随机值,所以在不知道密码的情况下,即使发现附加信息位异常也无法还原出信息核心代码嵌入水印——解析wav文件//解析数据//RIFF Chunk信息System.out.println(RIFF WAVE Chunk ID(RIFF WAVE块起始标记):+new String(wavdata,0x00,4));System.out.println(RIFF WAVE Chunk SIZE(去除RIFF WAVE块后剩余大小):+((wavdata[0x04]0xff)+(wavdata[0x05]0xff)*256+(wavdata[0x06]0xff)*65536));System.out.println(RIFF WAVE Chunk Type(音频类型):+new String(wavdata,0x08,4));//Format Chunk信息System.out.println(Format WAVE Chunk ID(格式块起始标记):+new String(wavdata,0x0c,4));System.out.println(Format WAVE Chunk Size(格式块大小):+(wavdata[0x10]0xff));System.out.println(Format WAVE Chunk FormatTag((编码方式):+(wavdata[0x14]0xff));System.out.println(Format WAVE Chunk Channels((声道数):+(wavdata[0x16]0xff));System.out.println(Format WAVE Chunk SamplesPerSec(每秒采样数):+((wavdata[0x18]0xff)+(wavdata[0x19]0xff)*256));System.out.println(Format WAVE Chunk AvgBytesPerSec(每秒所需字节数):+((wavdata[0x1c]0xff)+(wavdata[0x1d]0xff)*256+(wavdata[0x1e]0xff)*65536));System.out.println(Format WAVE Chunk BlockAlign(数据块对齐单位):+(wavdata[0x20]0xff));System.out.println(Format WAVE Chunk BitsPerSamole(每个采样所需bit数):+(wavdata[0x22]0xff));嵌入水印——计算可嵌入信息量//计算可写信息量System.out.println(数据区长度+(i-40)+字节,理论上可隐藏信息+(i-40)/8+字节);嵌入水印——输入水印信息并字节化System.out.println(输入水印信息:);String watermark = strin.readLine();//将水印数据转为字节数据存储在wmarkdata中byte wmarkdata[] = watermark.getBytes();嵌入水印——根据密码生成随机序列Random random = new Random(seed);int s

文档评论(0)

ligennv1314 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档