python通过声音将文件内容隐藏,实现原理是将文件的内容分别插入到声音文件的不同位置中做为当次采样的数据,目前是对英文文本文档加解密

#!/usr/bin/env python
# -*- coding: utf-8 -*-
#http://blog.csdn.net/myhaspl
#code:myhaspl@qq.com
#将文件隐藏在声音之中
import wave
import pylab as pl
import numpy as np print 'http://blog.csdn.net/myhaspl'
print 'myhaspl@qq.com'
print print 'working...' #编码
print u'正在将文件编码进声音'
print "generate wav data...."
# 打开文档 fo = wave.open(r"pltest.wav", "wb")
file_object = open('test.txt')
try:
all_the_text = file_object.read( )
finally:
file_object.close( ) wdata=map(ord,all_the_text)
wdata=np.array(wdata)
lwdata=len(wdata)
# 设置波形参数
#采样率
framerate = 44100
#声道数
nchannels=2
#每位宽度
sampwidth=2
#长度
nframes =framerate*4 #振幅
base_amplitude = 200
max_amplitude=128*base_amplitude #每个字符的间隔次数
interval=(nframes-10)/lwdata
#每周期样本数 wave_data=np.zeros((nframes), dtype=np.short) count=0
myrand=np.random.rand(nframes)
for curpos in xrange(0,nframes):
if curpos % interval==0 and count<lwdata:
possamp=wdata[count]*base_amplitude-64*base_amplitude
count+=1
elif curpos%60==0:
possamp=int(myrand[curpos]*max_amplitude-max_amplitude/2)
else:
possamp=0
wave_data[curpos]=possamp
#写波形数据参数
print "save new wav files...."
str_data=wave_data.tostring()
fo.setnchannels(nchannels)
fo.setframerate(framerate)
fo.setsampwidth(sampwidth)
fo.setnframes(nframes) fo.writeframes(str_data)
fo.close() # 绘制波形
wave_data.shape = -1, 2
wave_data = wave_data.T time = np.arange(0, nframes/2)
pl.subplot(211)
pl.plot(time, wave_data[0], c="r")
pl.subplot(212)
pl.plot(time, wave_data[1], c="g")
pl.xlabel("time (seconds)") #解码
new_wdata=[]
print u'正在从声音解码文件'
fi = wave.open(r"pltest.wav", "rb")
fi_params=fi.getparams()
fi_nframes = fi_params[3]
fi_str_data=fi.readframes(fi_nframes)
fi_wave_data= np.fromstring(fi_str_data, dtype=np.short)
count=0
for curpos in xrange(0,nframes):
if curpos % interval==0 and count<lwdata:
possamp=(fi_wave_data[curpos]+64*base_amplitude)/base_amplitude
new_wdata.append(possamp)
count+=1
my_the_text="".join(map(chr,new_wdata))
file_object = open('mytext.txt', 'w')
file_object.write(my_the_text)
file_object.close( )

本博客所有内容是原创,未经书面许可,严禁任何形式的转载

http://blog.csdn.net/u010255642

>>> runfile(r'K:\book_prog\audio_hy.py', wdir=r'K:\book_prog')
http://blog.csdn.net/myhaspl
myhaspl@qq.com

working...
正在将文件编码进声音
generate wav data....
save new wav files....
正在从声音解码文件
>>>

上图是对一段python代码文件的加密后形成的声音波形,加密的python代码文件内容如下:

#!/usr/bin/env python

#-*- coding: utf-8 -*-

#code:myhaspl@qq.com

import cv2

import numpy as np

fn="test1.jpg"

print 'http://blog.csdn.net/myhaspl'

print 'myhaspl@qq.com'

print

print 'loading %s ...' % fn

print 'working',

img = cv2.imread(fn)

w=img.shape[1]

h=img.shape[0]

sz1=w

sz0=h

EVENTS = ['CV_EVENT_MOUSEMOVE', 'CV_EVENT_LBUTTONDOWN', 'CV_EVENT_RBUTTONDOWN',  'CV_EVENT_MBUTTONDOWN',  'CV_EVENT_LBUTTONUP',

          'CV_EVENT_RBUTTONUP', 'CV_EVENT_MBUTTONUP'  , 'CV_EVENT_LBUTTONDBLCLK','CV_EVENT_RBUTTONDBLCLK','CV_EVENT_MBUTTONDBLCLK']

def callback_function(event,x,y,flag,param):

        global EVENTS

        global img

        

        if EVENTS[event]=='CV_EVENT_LBUTTONDOWN':

                print "(%d,%d):"%(y,x)

                print img[y,x,:]

                cv2.imshow('img', img)

return

def getdistance(color1,color2):

    return np.sqrt(sum((color1-color2)*(color1-color2)))

cv2.namedWindow('img')     

cv2.setMouseCallback('img', callback_function)

cv2.imshow('img', img)     

cv2.waitKey()  

cv2.destroyAllWindows()

python手记(51)的更多相关文章

  1. python手记(50)

    #!/usr/bin/env python # -*- coding: utf-8 -*- #http://blog.csdn.net/myhaspl #code:myhaspl@qq.com imp ...

  2. python手记(26)

    #!/usr/bin/env python import cv2 import sys fn="test2.jpg" if __name__ == '__main__': prin ...

  3. python手记(32)

    #!/usr/bin/env python #-*- coding: utf-8 -*- import cv2 import numpy as np fn="test2.jpg" ...

  4. python手记(30)

    #!/usr/bin/env python #-*- coding: utf-8 -*- import cv2 import numpy as np fn="test3.png" ...

  5. python手记(31)

    #!/usr/bin/env python #-*- coding: utf-8 -*- import cv2 import numpy as np fn="test2.jpg" ...

  6. python手记(38)

    runfile(r'K:\testpro\testopencv.py', wdir=r'K:\testpro') http://blog.csdn.net/myhaspl myhaspl@qq.com ...

  7. python手记(39)

    #!/usr/bin/env python #-*- coding: utf-8 -*- #code:myhaspl@qq.com import cv2 import numpy as np fn=& ...

  8. python手记(45)

    python 声音编辑,减少音量 #!/usr/bin/env python # -*- coding: utf-8 -*- #http://blog.csdn.net/myhaspl #code:m ...

  9. python手记(44)

    #!/usr/bin/env python # -*- coding: utf-8 -*- #http://blog.csdn.net/myhaspl #code:myhaspl@qq.com imp ...

随机推荐

  1. 七牛云Fetch第三方资源并转码(PHP版)

    七牛云的图片加速一直在用,好用没得说,最近项目需要做个微信端录音,然后上传,别人试听的功能,录音和上传用的都是微信的接口,有文档,比较方便,但是上传后,微信只给保存3天,所以就下载到了七牛,也就用到了 ...

  2. externn "C"解析

    1.揭密extern "C" extern "C"包含双重含义,从字面上即可得到:首先,被它修饰的目标是 "extern”的:其次,被它修饰的目标是 ...

  3. Number Steps

    Number Steps Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tota ...

  4. SQL Server 创建索引的 5 种方法

    前期准备: create table Employee (            ID int not null primary key,            Name nvarchar(4),  ...

  5. QP在STM32F10X上第一个应用

        两天没有写博客了,这两天主要还是在考虑软件的结构性问题,用不用QP?用不用ST库函数?看了ucos,freertos,tinyos以及Contiki,库函数的问题看了使用库的软件结构,直接操作 ...

  6. X光机的原理及构造

    一.X射线的发现 1895年德国物理学家伦琴(W.C.RÖntgen)在研究阴极射线管中气体放电现象时,用年伦琴荣获物理学第一个诺贝尔奖金.科学总是在不断发展的,经伦琴及各国科学家的反复实践和研究,逐 ...

  7. hdr_beg(host) 主机名开始

    What does "acl cdn_name hdr_beg(host) -i foor.bar.com" mean in HAProxy's configuration? 在H ...

  8. poj 3233 Matrix Power Series

    A为一个n*n的矩阵,求A+A^2+A^3+...+A^n Sk = A + A2 + A3 + - + Ak       =(1+Ak/2)*(A + A2 + A3 + - + Ak/2  )+{ ...

  9. MVC折线图应用

    后台 获取值并转换成json数据存到实体里面,然后前台输出 HighchartsModels model = new HighchartsModels(); model.DataDicJson = J ...

  10. Chessboard(规律)&&阿里巴巴和n个大盗(规律)

    Chessboard Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...