• Logistic map混沌掩盖信号


    • 开学接触了一些有关混沌知识的学习,阅读量一些混沌通信的论文,对于混沌掩盖信号以确保加密通信有一定的兴趣。混沌的产生我选用的是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)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36

    其中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='')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33

    在这里插入图片描述
    最终可以实现混沌的滤除。
    在输出部分时,浮点数的精度计算没有得到很好的计算,问题如下:
    请添加图片描述
    在第四行,空格的ascii码计算中,出现了错误,混沌与接受信号已经全部设置成为了六位小数,接受部分也是如此,对于这种情况很是不解,不知道问题出现在哪里,由于ascii码的计算错误,在强制转换成整数类型后会出现下图的错误,空格部分的输出有误:
    请添加图片描述
    最后采用了向上保留整数的方法才正常的输出,真个计算中只有空格出现了这种错误,而且只是部分空格,希望有大佬教一下。

  • 相关阅读:
    FPGA - 7系列 FPGA内部结构之Clocking -04- 多区域时钟
    无线蓝牙耳机什么牌子好一点?2022年蓝牙耳机推荐
    一文理清JVM结构
    Java中如何处理时间--Date类
    【腾讯云云上实验室-向量数据库】腾讯云VectorDB:深度学习场景下的新一代数据存储方案
    springcloud之nacos服务治理
    拆解现货黄金隔夜利息计算公式
    蓝帽杯2022年半决赛 writeup(附取证题目+解压密码+附件)
    HashMap-链表与红黑树转换触发条件
    艾美捷重组蛋白酶K,无动物源/AF性质和稳定性
  • 原文地址:https://blog.csdn.net/KLSZM/article/details/133418344