【混沌加解密调制解调】基于FPGA的混沌自同步混沌数字保密通信系统
1.软件版本
quartusii12.1
2.本算法理论知识
本系统的基本结构,我们遵循你所提供的结构进行,整个框图如下所示:
各个部分的功能如下:
- 加密算法模块采用异或运算,它将来自信源编码的二进制数字序列与密码序列进行异或运算产生密文序列。加密完成后,再通知驱动系统迭代一次,这样就可以保证数据的完整性。
- 驱动系统序列密码发生模块的主要功能是产生用于加密的密码序列。它是数字加密系统中加密可靠性的核心部分,包括机密序列的产生(在发送端对明文进行加密。)因为是自同步系统,所以加密后的混沌序列还要作为驱动系统的迭代值。
- 解密算法模块也采用异或运算,在接收端,将密文序列与密码序列进行异或运算还原成二进制明文序列。
- 密码同步检测模块主要是产生密码同步信号来驱动响应系统密码发生器模块,用于对接收方的密码产生器的状态进行更新。其工作原理是判断经信道传输的密文是否发生变化,如果变化了就产生一个驱动信号,一方面是驱动响应系统进行下一次迭代,另一方面是驱动解密算法模块进行解密。
- 响应系统序列发生器模块的主要功能是产生用于加密的密码序列,当他接收到密码同步检测模块生成的密码同步驱动信号后,响应系统就迭代一次。
3.核心代码
//`timescale 1 ns/ 100 ps
module Encryption_complete_system(i_clk,i_rst,i_enable,//the enable of signali_voice, //the signalo_enable,//the enable of p2so_serial_dout,//the serial data of signalo_serial_frame,o_T_signal//the data of Encryption);input i_clk;
input i_rst;
input i_enable;
input[15:0] i_voice;output o_enable;
output o_serial_dout;
output o_serial_frame;
output signed[31:0]o_T_signal;//change the parallel data to serial data
p2s p2s_u(.i_clk (i_clk),.i_rst (i_rst),.i_enable (i_enable),.i_voice (i_voice),.o_enable (o_enable),.o_serial_dout(o_serial_dout)); add_frame add_frame_u(.i_clk (i_clk),.i_rst (i_rst),.i_din (o_serial_dout),.i_enable (o_enable),.o_dout (o_serial_frame),.o_enable ()); wire signed[31:0]xn;
wire signed[31:0]yn;
wire signed[31:0]zn;
Lorenz Lorenz_u(.i_clk (i_clk),.i_rst (i_rst),.i_yn (o_T_signal),.o_xn (xn), .o_yn (yn),.o_zn (zn));Encryption Encryption_u(.i_clk (i_clk),.i_rst (i_rst),.i_din (o_serial_frame),.i_yn (yn),.o_signal (o_T_signal)); endmodule
//`timescale 1 ns/ 100 ps
module Decryption_complete_system(i_clk,i_rst,i_rec_signal,o_dout,o_dout_sign,o_peak,o_peak_enable,o_peak_dout,o_enable2,o_voice_dout); input i_clk;
input i_rst;
input signed[31:0] i_rec_signal;
output signed[31:0]o_dout;
output o_dout_sign; output[6:0] o_peak;
output o_peak_dout;
output o_peak_enable; output o_enable2;
output[15:0] o_voice_dout; wire signed[31:0]xn;
wire signed[31:0]yn;
wire signed[31:0]zn;
Lorenz2 Lorenz2_u(.i_clk (i_clk),.i_rst (i_rst),.i_yn (i_rec_signal),.o_xn (xn), .o_yn (yn),.o_zn (zn)); Decryption Decryption_u(.i_clk (i_clk),.i_rst (i_rst),.i_din (i_rec_signal),.i_yn (yn),.o_signal(o_dout));reg o_dout_sign;
always @(posedge i_clk or posedge i_rst)
beginif(i_rst)begino_dout_sign <= 1'b0;end
else beginif(o_dout < 32'h0000_00ff)o_dout_sign <= 1'b0;elseo_dout_sign <= 1'b1; end
end find_frame find_frame_u(.i_clk (i_clk),.i_rst (i_rst),.i_din (o_dout_sign),.o_peak (o_peak),.o_dout (o_peak_dout),.o_enable(o_peak_enable) ); s2p s2p_u(.i_clk (i_clk),.i_rst (i_rst),.i_enable (o_peak_enable),.i_serial_din (o_peak_dout),.o_enable (o_enable2),.o_voice_dout (o_voice_dout)); endmodule
clc;
clear;
close all;N = 50000;x = zeros(N,1);
y = zeros(N,1);
z = zeros(N,1);x(1) = 0.001;
y(1) = 0.002;
z(1) = 0.02;S1 = double(rand(N,1)>=0.5);
%简化后的发送
for n = 1:N-1n%反馈if n == 1S1_T(n)= S1(n) + y(n); y(n+1) = 0.028*x(n) - 0.001*x(n)*z(n) + 0.999*y(n); x(n+1) = 0.99*x(n) + 0.01*y(n);z(n+1) = 0.001*x(n)*y(n) + 0.9973333*z(n); elseS1_T(n)= S1(n) + y(n);y(n+1) = 0.028*x(n) - 0.001*x(n)*z(n) + 0.999*S1_T(n); x(n+1) = 0.99*x(n) + 0.01*S1_T(n);z(n+1) = 0.001*x(n)*S1_T(n) + 0.9973333*z(n); endend%简化后的接收
for n = 1:N-1n%反馈S1_R(n)= S1_T(n) - y(n);y(n+1) = 0.028*x(n) - 0.001*x(n)*z(n) + 0.999*S1_T(n); x(n+1) = 0.99*x(n) + 0.01*S1_T(n);z(n+1) = 0.001*x(n)*S1_T(n) + 0.9973333*z(n);
endfigure;
subplot(311);
plot(S1);
title('原信号');
axis([1,N,-1,2]);subplot(312);
plot(S1_T);
title('加密后的信号');subplot(313);
plot(S1_R);
title('解密后的信号');
axis([1,N,-2,2]);
4.操作步骤与仿真结论
首先实现使用MATLAB进行算法的仿真,我们得到的仿真结果如下所示:
运行MATLAB程序:
这个是混沌模型的基本仿真,说明公式以及初始值选取的正确性。
运行MATLAB程序:
这个程序是混沌加密调制解调系统的MATLAB浮点仿真结果图,说明上面的结果是正确的。
运行MATLAB程序:
从上面的仿真结果可知,以定点进行仿真,只要量化宽度满足一定要求之后,其完全不影响系统的精度。
根据上面的介绍,我们可以编写了如下的程序:
自上而下,依次为:
系统顶层文件
——加密调制模块
————加密子模块,lorenz混沌序列产生模块,组帧模块,并串模块。
——解密解调模块
————解密子模块,Lorenz混沌序列产生模块,搜帧模块,串并模块。
仿真结果如下所示:
其顶层的文件的管脚为:
1 |
i_clk |
系统时钟,就是接到硬件板子上的晶振位置。 |
2 |
i_rst |
系统复位,随便接到板子上的key数字按键上。 |
3 |
o_signal_enable |
测试并行信号的产生使能信号,不用接板子, |
4 |
o_signal |
测试并行信号,这个信号为了验证,你可以接signaltapII上 |
5 |
o_enable |
加密模块的使能信号,不用接板子 |
6 |
o_serial_dout |
串行输出,接板子上的测试脚或者signaltapII上 |
7 |
o_serial_frame |
串行信号组帧输出,接板子上的测试脚或者signaltapII上 |
8 |
o_T_signal |
加密输出,这个信号为了验证,你可以接signaltapII上 |
9 |
o_dout |
解密输出,可以接signaltapII上 |
10 |
o_dout_sign |
解密输出信号的符号判决,接板子上的测试脚或者signaltapII上 |
11 |
o_peak |
搜帧模块的相关峰输出,不用接板子 |
12 |
o_peak_enable, |
搜帧模块的使能输出,不用接板子 |
13 |
o_peak_dout |
搜帧模块的数据输出,接板子上的测试脚或者signaltapII上 |
14 |
o_enable2 |
最后串并转化的使能,不用接板子 |
15 |
o_voice_dout |
最后串并转化的数据输出,接板子上的测试脚或者signaltapII上 |
5.参考文献
[1]马在光, 吴纯英, 丘水生. 混沌同步和混沌通信研究的新进展与新尝试[J]. 电波科学学报, 2002, 17(3):8.
A01-53
6.完整源码获得方式
方式1:微信或者QQ联系博主
方式2:订阅MATLAB/FPGA教程,免费获得教程案例以及任意2份完整源码
【混沌加解密调制解调】基于FPGA的混沌自同步混沌数字保密通信系统相关推荐
- matlab实现ofdm调制解调,基于ofdm的调制解调原理,ofdm调制解调fpga代码 - 全文
OFDM介绍 OFDM ( Orthogona lFrequency D iv isionM ulTIplex ing) 即正交频分复用技术, 实际上 OFDM 是 MCM M ult-iC arri ...
- matlab 调制 解调,基于Matlab调制与解调的实现
<基于Matlab调制与解调的实现>由会员分享,可在线阅读,更多相关<基于Matlab调制与解调的实现(15页珍藏版)>请在人人文库网上搜索. 1.基于Matlab调制与解调的 ...
- msk调制 vhdl_基于FPGA的MSK调制解调器的设计与仿真
论文编号:JD1172 论文字数:10913,页数:35 附任务书,开题报告,文献综述,外文翻译,中期检查 毕业设计说明书(论文)中文摘要 本文根据数字信号MSK调制和解调的工作原理,采用模块化设 ...
- matlab实现ofdm调制解调,基于MATLAB的OFDM调制解调仿真
基于MATLAB的OFDM调制解调仿真 题目:基于 MATLAB的 OFDM调制解调仿真2009年 6 月 13 日目 录摘要 .IIAbstract IV第 1章 正交频分复用的来源 - 1 -1. ...
- .NET Core加解密实战系列之——使用BouncyCastle制作p12(.pfx)数字证书
简介 加解密现状,编写此系列文章的背景: 需要考虑系统环境兼容性问题(Linux.Windows) 语言互通问题(如C#.Java等)(加解密本质上没有语言之分,所以原则上不存在互通性问题) 网上资料 ...
- 脉位调制解调 matlab,基于matlab的am调制解调
基于matlab的am调制解调 基于 Matlab 的 AM 调制解调一.AM 的调制原理AM 是指对信号进行幅度调制 [2].一般做法是先在原信号上叠加一个直流信号,以保证信号 , 然后乘上一个高频 ...
- 4fsk调制matlab_数字调制解调技术的MATLAB与FPGA实现
<数字调制解调技术的MATLAB与FPGA实现>包含2个版本.Xilinx/VHDL版的设计平台为ISE14.7/VHDL,配套开发板为CXD301:Altera/Verilog版的设计平 ...
- Android混流技术,基于Android的实时语音混沌保密技术的实现
摘要: 网络和多媒体技术的发展和成熟,使之通过网络进行语音交流越来越流行,同时,网络的开放和共享性使信息安全问题也得到更多的关注.因此,怎样实现语音的安全通信的研究变得越来越重要.混沌系统由于自身独特 ...
- 微信小程序前端RSA加解密
开门见山地说,希望各位前端不要搜到这篇文章,因为我总感觉在小程序端去做RSA的加解密总有种脱了裤子放屁多此一举的感觉.但是需求来的时候总是说不准的,接下来我就给大家推荐一种在小程序端比较方便,操作不 ...
最新文章
- 机器学习集成学习与模型融合!
- 如何在IE右键菜单中添加菜单项(转)
- SELECT INTO 和 replace into SELECT 两种表复制语句
- 关于String的matches方法
- JZOJ 5186. 【NOIP2017提高组模拟6.30】tty's home
- SpringBoot_配置-@PropertySource、@ImportResource、@Bean
- 如何用c语言从txt文件中读取数据
- 057 Java中kafka的Producer程序实现
- 企业级MySQL数据库备份方案:增量备份、全量备份、逻辑备份
- 【HDOJ 3790】最短路径问题,Dijkstra最短路,双边权
- for循环的嵌套,for循环的穷举迭代
- Mac OS X Snow Leopard 10.6下载及安装
- spring事件监听器系列二:@EventListener注解原理
- 五点菱形格式MATLAB,五点菱形格式-拉普拉斯第一边值问题-计算实习报告.docx
- python pandas库的介绍和使用
- idea打字光标不跟随解决
- 用Canvas画一棵二叉树
- 学编程以来第一次遇到的灵异事件
- php756中医,百人诈骗团伙冒充老中医微信钓鱼九千余人被骗
- 微信气泡主题设置_微信气泡主题华为手机要怎么弄 华为手机微信气泡主题设置方法介绍...