基于混沌序列的图像加密解密算法(陈永红,黄席樾)
2009-03-31 12:51
197 查看
基于混沌序列的图像加密解密算法(陈永红,黄席樾)
计 算 机 工 程 2004年11月
摘 要:提出了基于混沌序列的图像加密解密算法,该算法由一种新的混沌系统生成整数值混沌序列,然后利用该整数值混沌序列把图像的每
一像素变换到另一位置,得到加密图像。 该算法具有计算量少、安全性高、无失真的特点,实验结果令人满意。
终于试着实现了,不过我做的效果不太好,而且解密不成功,原论文中也有错误。
用python实现的,程序写的很乱!
先放着
GenList.py就是上边那个迭代公式
===================GenList.py==========================
def GenList ( m, a, x ):
if x < 1:
x = 1
if m % a == 0:
x = m * x / a
else:
x = m * x / a + 1
elif x <= a:
if m % a == 0:
x = m * x / a
else:
x = m * x / a + 1
elif x > a and x < m:
x = m * (m-x) / (m-a)
else :
x = 1
return x
if __name__ == "__main__":
m = 371
n = 205
x = 371
list = []
for i in range(1,15):
x = Fun (m, n, x)
list.append(x)
print x
print list[1]
print list
en.py加密图象
===================en.py==========================
import Image
import GenList
im = Image.open("hi.jpg")
imn = Image.new("RGB",im.size)
m = 1997
n = 1335
x = 33
list = []
#print m
#print n
M = im.size[0]
N = im.size[1]
for i in range(1,M+N+1):
x = GenList.GenList (m, n, x)
list.append(x)
#print x
#print list
for i in range(0,M):
XI = list[i] % N
for j in range(0,N):
if j + XI >= N:
imn.putpixel((i,j + XI - N),im.getpixel((i,j)))
else:
imn.putpixel((i,j + XI),im.getpixel((i,j)))
for j in range(0,N):
YI = list[j + M] % M
for i in range(0,M):
if i + YI >= M:
imn.putpixel((i + YI - M ,j),im.getpixel((i,j)))
else:
imn.putpixel((i + YI ,j),im.getpixel((i,j)))
imn.save("ok.jpg")
de.py解密图象(我解密出来的图象比我加密后的图象效果还好,不知道问题出在哪里)
===================de.py==========================
import Image
import GenList
im = Image.open("ok.jpg")
imn = Image.new("RGB",im.size)
m = 1997
n = 1335
x = 33
list = []
#print m
#print n
M = im.size[0]
N = im.size[1]
for i in range(1,M+N+1):
x = GenList.GenList (m, n, x)
list.append(x)
#print "hi"
#print list
for j in range(0,N):
YI = list[j + M] % M
for i in range(0,M):
if i >= YI:
imn.putpixel((i - YI,j),im.getpixel((i,j)))
else:
imn.putpixel((i - YI + M ,j),im.getpixel((i,j)))
for i in range(0,M):
XI = list[i] % N
for j in range(0,N):
if j >= XI:
imn.putpixel((i,j - XI ),im.getpixel((i,j)))
else:
imn.putpixel((i,j - XI + N),im.getpixel((i,j)))
imn.save("ori.jpg")
==========================================================
我写出来的python程序效率很低,用python加密一幅稍微大一点的图象要等近一分钟!
而且,加密后文件大小有变化,关键问题是不能解密,不知道问题出在哪里!
改天再研究吧!
2007-02-08
原因找到了!因为图片加密是分别对每行及每列象素移动,我写的python脚本,在移动完行以后进行列移动的时候依然使用原图片的象素颜色,而正确的使用经过行移动后的新图象的象素颜色!
脚本改后,加密效果果然好了,不过,解密后的图片出先了颜色丢失!可能是解密的过程有问题!
新修改的en.py
import Image
import GenList
im = Image.open("hi.jpg")
imn = Image.new("RGB",im.size)
imnn = Image.new("RGB",im.size)
m = 1997
n = 1335
x = 33
list = []
#print m
#print n
M = im.size[0]
N = im.size[1]
for i in range(1,M+N+1):
x = GenList.GenList (m, n, x)
list.append(x)
#print x
#print list
for i in range(0,M):
XI = list[i] % N
for j in range(0,N):
if j + XI >= N:
imn.putpixel((i,j + XI - N),im.getpixel((i,j)))
else:
imn.putpixel((i,j + XI),im.getpixel((i,j)))
for j in range(0,N):
YI = list[j + M] % M
for i in range(0,M):
if i + YI >= M:
imnn.putpixel((i + YI - M ,j),imn.getpixel((i,j)))
else:
imnn.putpixel((i + YI ,j),imn.getpixel((i,j)))
imnn.save("ok.jpg")
红色为修改部分,添加了临时图象文件!
修改后的de.py
import Image
import GenList
im = Image.open("ok.jpg")
imn = Image.new("RGB",im.size)
imnn = Image.new("RGB",im.size)
m = 1997
n = 1335
x = 33
list = []
#print m
#print n
M = im.size[0]
N = im.size[1]
for i in range(1,M+N+1):
x = GenList.GenList (m, n, x)
list.append(x)
#print "hi"
#print list
for j in range(0,N):
YI = list[j + M] % M
for i in range(0,M):
if i >= YI:
imnn.putpixel((i - YI,j),im.getpixel((i,j)))
else:
imnn.putpixel((i - YI + M ,j),im.getpixel((i,j)))
for i in range(0,M):
XI = list[i] % N
for j in range(0,N):
if j >= XI:
imn.putpixel((i,j - XI ),imnn.getpixel((i,j)))
else:
imn.putpixel((i,j - XI + N),imnn.getpixel((i,j)))
imn.save("ori.jpg")
原图象
加密后
解密后
解密不成功,郁闷ing
计 算 机 工 程 2004年11月
摘 要:提出了基于混沌序列的图像加密解密算法,该算法由一种新的混沌系统生成整数值混沌序列,然后利用该整数值混沌序列把图像的每
一像素变换到另一位置,得到加密图像。 该算法具有计算量少、安全性高、无失真的特点,实验结果令人满意。
终于试着实现了,不过我做的效果不太好,而且解密不成功,原论文中也有错误。
用python实现的,程序写的很乱!
先放着
GenList.py就是上边那个迭代公式
===================GenList.py==========================
def GenList ( m, a, x ):
if x < 1:
x = 1
if m % a == 0:
x = m * x / a
else:
x = m * x / a + 1
elif x <= a:
if m % a == 0:
x = m * x / a
else:
x = m * x / a + 1
elif x > a and x < m:
x = m * (m-x) / (m-a)
else :
x = 1
return x
if __name__ == "__main__":
m = 371
n = 205
x = 371
list = []
for i in range(1,15):
x = Fun (m, n, x)
list.append(x)
print x
print list[1]
print list
en.py加密图象
===================en.py==========================
import Image
import GenList
im = Image.open("hi.jpg")
imn = Image.new("RGB",im.size)
m = 1997
n = 1335
x = 33
list = []
#print m
#print n
M = im.size[0]
N = im.size[1]
for i in range(1,M+N+1):
x = GenList.GenList (m, n, x)
list.append(x)
#print x
#print list
for i in range(0,M):
XI = list[i] % N
for j in range(0,N):
if j + XI >= N:
imn.putpixel((i,j + XI - N),im.getpixel((i,j)))
else:
imn.putpixel((i,j + XI),im.getpixel((i,j)))
for j in range(0,N):
YI = list[j + M] % M
for i in range(0,M):
if i + YI >= M:
imn.putpixel((i + YI - M ,j),im.getpixel((i,j)))
else:
imn.putpixel((i + YI ,j),im.getpixel((i,j)))
imn.save("ok.jpg")
de.py解密图象(我解密出来的图象比我加密后的图象效果还好,不知道问题出在哪里)
===================de.py==========================
import Image
import GenList
im = Image.open("ok.jpg")
imn = Image.new("RGB",im.size)
m = 1997
n = 1335
x = 33
list = []
#print m
#print n
M = im.size[0]
N = im.size[1]
for i in range(1,M+N+1):
x = GenList.GenList (m, n, x)
list.append(x)
#print "hi"
#print list
for j in range(0,N):
YI = list[j + M] % M
for i in range(0,M):
if i >= YI:
imn.putpixel((i - YI,j),im.getpixel((i,j)))
else:
imn.putpixel((i - YI + M ,j),im.getpixel((i,j)))
for i in range(0,M):
XI = list[i] % N
for j in range(0,N):
if j >= XI:
imn.putpixel((i,j - XI ),im.getpixel((i,j)))
else:
imn.putpixel((i,j - XI + N),im.getpixel((i,j)))
imn.save("ori.jpg")
==========================================================
我写出来的python程序效率很低,用python加密一幅稍微大一点的图象要等近一分钟!
而且,加密后文件大小有变化,关键问题是不能解密,不知道问题出在哪里!
改天再研究吧!
2007-02-08
原因找到了!因为图片加密是分别对每行及每列象素移动,我写的python脚本,在移动完行以后进行列移动的时候依然使用原图片的象素颜色,而正确的使用经过行移动后的新图象的象素颜色!
脚本改后,加密效果果然好了,不过,解密后的图片出先了颜色丢失!可能是解密的过程有问题!
新修改的en.py
import Image
import GenList
im = Image.open("hi.jpg")
imn = Image.new("RGB",im.size)
imnn = Image.new("RGB",im.size)
m = 1997
n = 1335
x = 33
list = []
#print m
#print n
M = im.size[0]
N = im.size[1]
for i in range(1,M+N+1):
x = GenList.GenList (m, n, x)
list.append(x)
#print x
#print list
for i in range(0,M):
XI = list[i] % N
for j in range(0,N):
if j + XI >= N:
imn.putpixel((i,j + XI - N),im.getpixel((i,j)))
else:
imn.putpixel((i,j + XI),im.getpixel((i,j)))
for j in range(0,N):
YI = list[j + M] % M
for i in range(0,M):
if i + YI >= M:
imnn.putpixel((i + YI - M ,j),imn.getpixel((i,j)))
else:
imnn.putpixel((i + YI ,j),imn.getpixel((i,j)))
imnn.save("ok.jpg")
红色为修改部分,添加了临时图象文件!
修改后的de.py
import Image
import GenList
im = Image.open("ok.jpg")
imn = Image.new("RGB",im.size)
imnn = Image.new("RGB",im.size)
m = 1997
n = 1335
x = 33
list = []
#print m
#print n
M = im.size[0]
N = im.size[1]
for i in range(1,M+N+1):
x = GenList.GenList (m, n, x)
list.append(x)
#print "hi"
#print list
for j in range(0,N):
YI = list[j + M] % M
for i in range(0,M):
if i >= YI:
imnn.putpixel((i - YI,j),im.getpixel((i,j)))
else:
imnn.putpixel((i - YI + M ,j),im.getpixel((i,j)))
for i in range(0,M):
XI = list[i] % N
for j in range(0,N):
if j >= XI:
imn.putpixel((i,j - XI ),imnn.getpixel((i,j)))
else:
imn.putpixel((i,j - XI + N),imnn.getpixel((i,j)))
imn.save("ori.jpg")
原图象
加密后
解密后
解密不成功,郁闷ing
相关文章推荐
- [★]基于.NET 的 加密 解密 算法总结[二]
- 基于新唐M0的XXTEA加密解密算法源码
- 提供一个基于.NET的加密/解密算法
- 提供一个基于.NET的加密/解密算法[转.CNSDN.com.cn]
- 【翠字营原创】基于 cryptlib.lib 开发的几种加密解密算法经典例子 涉及: MD5 AES AES-CBC 希望对大家学习有帮助!
- 提供一个基于.NET SymmetricAlgorithm 类的、带私钥的加密/解密算法的包装类
- 基于.NET 的 加密 解密 算法总结[一]
- 闲来没事,自己写了一个基于Base64加密解密算法
- [★]基于.NET 的 加密 解密 算法总结[一]
- Base64 算法原理,以及编码、解码【加密、解密】 介绍
- PHP加密解密内部算法
- 基于Qt的图像处理技术和算法
- Java加密解密算法-AES加密解密
- java 对称加密——基于口令的加密与解密
- 收藏一个加密解密算法吧
- [iOS]加密解密算法
- ASP.NET 2.0 下加密解密算法的封装
- C# 加密解密算法 .
- 十三种基于直方图的图像全局二值化算法原理、实现、代码及效果。
- 加密解密算法(可逆)