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. shell编程笔记(基本部分)

    1.变量 a.需要给变量赋值时,可以这么写: b.要取用一个变量的值,只需在变量名前面加一个$ ( 注意: 给变量赋值的时候,不能在"="两边留空格 ) c.然后执行 chmod ...

  2. avd name对AVD的创建的影响

    创建avd的时候出现OK按钮显示灰色不可按状态,各种系数都显示对的.如下所示: 检查了各项觉得没有什么错,最后原来出错在AVD的name上面,不允许有空格或者非英文字母,把空格取消之后就没有问题了.

  3. QP在STM32F10X上第一个应用

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

  4. 李维作答 《insideVCL》——李维实在很勤奋,而且勇于突破,从不以旧的内容充数

    (编者按)<Inside VCL(VCL核心架构剖析)>一书出版以来,众多热心读者给李维先生.博文视点公司.CSDN写来信件,有更多朋友在各个论坛上发表关于该书的言论.读者们不但盛赞该书, ...

  5. 关于JavaScript的namespace命名空间

    写C或者JAVA习惯的人写JavaScript时可能会发现JavaScript并没有命名空间这一概念,当然如果没有接触过命名空间的程序猿(比如写js,PHP,Python)也可能对命名空间不关注或者不 ...

  6. cf466B Wonder Room

    B. Wonder Room time limit per test 1 second memory limit per test 256 megabytes input standard input ...

  7. 新浪系统工程师笔试--shell

    1. test01   test02 1 200    1 100 2 500    2 300 3 200    3 50 4 100    4 150 输出 200 100 100 500 300 ...

  8. Makefile与Shell的问题

    http://blog.csdn.net/absurd/article/details/636418 Makefile与Shell的问题 大概只要知道Makefile的人,都知道Makefile可以调 ...

  9. JDK自带工具jps,jstat,jmap,jconsole使用

    jps 与ps命令类似: ps -ef|grep java 用来显示本地的java进程,查看本地执行着几个java应用,并显示进程号. [root@SE43 ~]# jps //仅仅显示进程号 238 ...

  10. HDoj-2072-字数

    字数 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submiss ...