▲基于AES+BPSK调制解调加密通信系统matlab性能仿真

目录

1.AES 加密算法原理

1.1 密钥

1.2 加密变换

1.3 S盒变换(Subyte)

2.BPSK 调制解调原理

3.AES+BPSK加密通信系统

4.MATLAB程序

5.仿真结果

6.完整程序下载


1.AES 加密算法原理

        AES是一个迭代的、对称密钥分组的密码,它可以使用128、192和256位密钥,并且用128位(16字节)分组加密和解密数据。与公共密钥密码使用密钥对不同,对称密钥密码使用相同的密钥加密和解密数据。通过分组密码返回的加密数据的位数与输入数据相同。迭代加密使用一个循环结构,在该循环中重复置换(permutations)和替换(substitutions)输入数据。

       一个密码算法的有效性首先体现在可靠的安全性上。Rijndael算法设计采用针对差分和线性密码分析提出的宽轨迹策略(WTS),其最大优势是可以给出算法最佳差分特征的概率以及最佳线性逼近偏差的界;使用简单的部件组织成清晰的结构,便于算法安全性的分析。当然,在密码学界永远没有绝对的安全,Rijndael算法也不例外,如其明显的代数结构对安全性的潜在威胁已经受到一些学者的质疑。本文从简化算法攻击、算法结构性质分析以及密码分析的进展等方面对AES算法的密码分析状况进行讨论。

1.1 密钥

      密钥(Key)是密码算法中参与运算的数值(或者数值集)。对报文进行加密,我们需要一个加密算法、一个加密密钥以及明文,并由此产生密文。对报文进行解密,我们需要一个解密算法、一个解密密钥以及密文,并由此复原原始的明文。

1.2 加密变换

       AES的加密和解密框图如图1所示。设X施AES的128比特明文输入,Y是128比特的密文输出,则AES的密文Y可以用下面的复合变换表示:Y=A k(r+1) R  S  Akr   C  R  S  A k(r1)…… C R S Ak1(X)

        其中“”表示复合运算。这里Ak1 表示对X的一个变换Aki (X)=X ⊕KI(KI为第i轮的子密钥,为比特串的异或运算)。S:S盒置换。即对每一个字节用S-Box做一个置换。S-Box是一个给定的转换表。R:行置换。C:列置换。S’(x)=a(x)S(X)

 

1.3 S盒变换(Subyte)

对输入矩阵的任何一个元素A 做如下变换S[A]:

       在行变换中,中间状态矩阵State的第一行不变;第二至四行做如下变换,即将表3的状态矩阵变为表四的状态矩阵。

       在行变换中,中间状态矩阵State的第一行不变;第二至四行做如下变换,即将表3的状态矩阵变为表四的状态矩阵。

       

列变换是堆中间状态矩阵State逐列进行变换,其变换如下的矩阵运算:

                 

经过上面的运算,原来的一列就被替换成下面的式子所表达的新列

   

这里的⊕为按位异或运算,其中的乘法X 按照下面介绍的模乘同余规则进行计算。

2.BPSK 调制解调原理

      BPSK是一种简单的数字调制技术,它通过改变载波信号的相位来表示两个比特的状态(0和1)。具体来说,当输入比特为0时,载波相位保持不变;当输入比特为1时,载波相位翻转180度。假设输入的数据序列为b(n),其中b(n)∈{0,1}。载波信号可以表示为s(t)=Acos(2πfc​t+ϕ),其中 A 是幅度,fc​ 是载波频率,ϕ 是初始相位。

3.AES+BPSK加密通信系统

       将待传输的明文数据按照 AES 加密算法进行加密,得到密文数据。对加密后的密文数据进行 BPSK 调制,将其转换为射频信号,并通过天线发送出去。

       接收天线接收到信号后,进行 BPSK 解调,得到解调后的基带信号。对解调后的基带信号按照 AES 解密算法进行解密,恢复出原始的明文数据。

       在实际应用中,还需要考虑信道编码、同步等问题,以提高系统的可靠性和性能。同时,对于 AES 加密算法的密钥管理和 BPSK 调制解调的参数优化也是关键因素,需要根据具体的应用场景和需求进行合理的设计和调整。

4.MATLAB程序

33...........................................
for ijk = 1:length(SNRs);
    SNR=SNRs(ijk);
    % 进行核心操作
    % 使用扩展密钥、S 盒和多项式变换矩阵将明文转换为密文
    % 调用 cipher 函数进行加密操作,将明文转换为密文
    ciphertext = cipher (plaintext, w, s_box, poly_mat, 1);
    
    %转换为二进制
    tmps0=[];
    for ij = 1:length(ciphertext)
        tmps0 = [tmps0,double(dec2bin(ciphertext(ij),8))]; 
    end
    tmps0=tmps0-48;
    
    for k = 1:1000
        [k,ijk]
        %BPSK
        u = 2*tmps0-1;
        %通过信道模型
        ut= awgn(u,SNR);
        
        
        %BPSK解调
        U2 = round((sign(ut)+1)/2);
        %转换回十进制
        tmps=[];
        for ij = 1:length(U2)/8
            tt = U2(8*ij-7:8*ij);
            tmps = [tmps,tt(1)*2^7+tt(2)*2^6+tt(3)*2^5+tt(4)*2^4+tt(5)*2^3+tt(6)*2^2+tt(7)*2^1+tt(8)*2^0]; 
        end
        ciphertextR=tmps;
        
        % 将密文转换回明文
        % 使用扩展密钥、逆 S 盒和逆多项式变换矩阵
        % 调用 inv_cipher 函数进行解密操作,将密文还原为明文
        re_plaintext = inv_cipher (ciphertextR, w, inv_s_box, inv_poly_mat, 1);
        
         
        
        % 输出明文
        plaintext;
        
        % 输出密文
        ciphertext;
        
        % 输出还原后的明文
        re_plaintext;
        
        
        %计算错误个数
        err(ijk,k) = 1-length(find(re_plaintext==plaintext))/length(plaintext);
    end

    if SNR==0
       plaintext1=plaintext; 
       re_plaintext1=re_plaintext;
    end
    if SNR==4
       plaintext2=plaintext; 
       re_plaintext2=re_plaintext;
    end
    if SNR==10
       plaintext3=plaintext; 
       re_plaintext3=re_plaintext;
    end
    if SNR==20
       plaintext4=plaintext; 
       re_plaintext4=re_plaintext;
    end
end

figure;
semilogy(SNRs,mean(err,2),'b-o');
xlabel('SNR');
ylabel('error');
grid on;

disp('输出明文');plaintext1
disp('SNR=0,输出AES还原后的明文');re_plaintext1
disp('SNR=4,输出AES还原后的明文');re_plaintext2
disp('SNR=10,输出AES还原后的明文');re_plaintext3
disp('SNR=20,输出AES还原后的明文');re_plaintext4

5.仿真结果

输出明文

plaintext1 =

     0
    17
    34
    51
    68
    85
   102
   119
   136
   153
   170
   187
   204
   221
   238
   255

SNR=1,输出AES还原后的明文

re_plaintext1 =

   182   244   109   144   210   226   138   155   108    13   120    17     8    81     6   116

SNR=5,输出AES还原后的明文

re_plaintext2 =

    69    73   130    34    78   173    38   253   244   153   100   225    74    80     8   210

SNR=11,输出AES还原后的明文

re_plaintext3 =

     0    17    34    51    68    85   102   119   136   153   170   187   204   221   238   255

SNR=20,输出AES还原后的明文

re_plaintext4 =

     0    17    34    51    68    85   102   119   136   153   170   187   204   221   238   255
 

6.完整程序下载

完整可运行代码,博主已上传至优快云,使用版本为matlab2022a:

https://download.youkuaiyun.com/download/ccsss22/90193119

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fpga和matlab

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值