- 开学接触了一些有关混沌知识的学习,阅读量一些混沌通信的论文,对于混沌掩盖信号以确保加密通信有一定的兴趣。混沌的产生我选用的是logistic
map映射产生混沌,主要就是一个递推公式:
对于这样一个式子,可以看出,每一个混沌的不同只与两个值有关,分别是a和x0.所以只要设置好这两组静态参数,就可以实现混沌同步,这样混沌掩盖的信号就能够通过同步复原出来。对于整体思路就是,设计一个程序,能够读取文本中的信息。通过信息的ascii码与产生的混沌直接相加来实现信息的加密。解密部分也是一样的混沌产生函数,这样同样的参数可以实现混沌同步。将加密的信息通过减法直接减去混沌,再通过ascii码的转化便可以实现信息的恢复。
接受部分如下:
import matplotlib.pyplot as plt
import numpy as np
import os
def chaos_generation(initial_chaos,a,length):
chaos_value=float(initial_chaos)
for item in range(length):
anss.append(chaos_value)
chaos_value=round(float(a)*chaos_value*(1-chaos_value),6)
pass
pass
data=open('text.txt')
strr=data.read()
a=input("请输入参数一的值:")
inital_chaos=input("请输入参数二的值:")
length=len(strr)
anss=[]
mapp=[]
chaos_generation(inital_chaos,a,length)
plt.plot(np.arange(length),anss)
plt.title('Logistic map')
plt.xlabel('n_value')
plt.ylabel('chaos_value')
plt.show()
for item in strr:
mapp.append(ord(item))
pass
key=[]
jtem=0
for inem in anss:
value=inem+mapp[jtem]
jtem+=1
key.append(value)
pass
final_value=','.join(str(i) for i in key)
value_print=open('123.txt',mode='w+')
value_print.write(final_value)
其中text文本中运用了一段网上的英文美文:
程序中的参数设置为a=4,x0=0.3。
产生的混沌如下图,混沌的长度即为文本文件中的文本的长度。
这样就实现了混沌对于文本的掩盖,掩盖后的数据存放于文本123.text中:
再通过输出部分处理,输出部分还是用logistic映射产生混沌,其中保证参数为a=4,x0=0.3来实现混沌同步,产生一段相同的混沌,之后利用减法,直接减去混沌实现滤除。代码如下;
import math
import matplotlib.pyplot as plt
import numpy as np
def chaos_generation(initial_chaos,a,length):
chaos_value=float(initial_chaos)
for item in range(length):
anss.append(chaos_value)
chaos_value=round(float(a)*chaos_value*(1-chaos_value),6)
pass
pass
data=open('123.txt')
str=data.read()
a=input("请输入参数一的值:")
inital_chaos=input("请输入参数二的值:")
flag=str.split(',')
receive=[]
for item in flag:
receive.append(float(item))
pass
anss=[]
length=len(receive)
chaos_generation(inital_chaos,a,length)
jtem=0
mapp=[]
for item in receive:
numb=item-anss[jtem]
#print("item-jtem=numb",item,"-",anss[jtem],"=",numb)
jtem+=1
mapp.append(math.ceil(numb))
pass
#print(mapp)
for item in mapp:
print(chr(item),end='')
最终可以实现混沌的滤除。
在输出部分时,浮点数的精度计算没有得到很好的计算,问题如下:
在第四行,空格的ascii码计算中,出现了错误,混沌与接受信号已经全部设置成为了六位小数,接受部分也是如此,对于这种情况很是不解,不知道问题出现在哪里,由于ascii码的计算错误,在强制转换成整数类型后会出现下图的错误,空格部分的输出有误:
最后采用了向上保留整数的方法才正常的输出,真个计算中只有空格出现了这种错误,而且只是部分空格,希望有大佬教一下。