基于AES算法的英文文字加解密

目录

一、理论基础

二、核心程序

三、仿真结论


一、理论基础

       AES算法是一种对称加密算法,被广泛应用于数据加密和保护领域中。将介绍如何使用AES算法对英文文字进行加解密。

一、AES算法概述

      AES算法是一种分组密码算法,可以对128位数据块进行加密和解密。它使用一个密钥来加密数据,密钥长度可以是128位、192位或256位。AES算法使用四个基本操作:SubBytes、ShiftRows、MixColumns和AddRoundKey,这些操作可以应用多次来增强加密的安全性。

SubBytes操作
     SubBytes操作是AES算法中的一个基本操作,它用一个固定的S盒将输入的字节替换为另一个字节。S盒是一个16行16列的表格,其中每个元素都是一个8位二进制数。SubBytes操作通过查找输入字节在S盒中对应的元素,将输入字节替换为S盒中对应的元素。

ShiftRows操作
      ShiftRows操作是AES算法中的另一个基本操作,它将输入数据的每一行向左移动若干个字节。第一行不移动,第二行向左移动一个字节,第三行向左移动两个字节,第四行向左移动三个字节。ShiftRows操作可以使输入数据的局部结构更加分散,增强加密的安全性。

MixColumns操作
       MixColumns操作是AES算法中的第三个基本操作,它将输入数据的每一列进行线性变换。MixColumns操作使用一个4x4的矩阵来进行变换,矩阵中的每个元素都是一个8位二进制数。MixColumns操作可以使输入数据的局部结构更加复杂,增强加密的安全性。

AddRoundKey操作
       AddRoundKey操作是AES算法中的最后一个基本操作,它将输入数据与一个密钥进行异或运算。密钥是一个与输入数据长度相同的字节序列,用于加密和解密数据。AddRoundKey操作可以增强加密的安全性,使得输入数据与密钥之间的关系更加复杂。

二、AES算法流程

AES算法的加密和解密过程是相似的,主要包括以下步骤:

密钥扩展
       在AES算法中,密钥需要进行扩展,以便在加密和解密过程中使用。密钥扩展使用一个密钥调度算法,将输入的密钥扩展为多个轮密钥。轮密钥是一个与输入数据长度相同的字节序列,用于加密和解密数据。

初始轮
       初始轮是AES算法中的第一轮,它将输入数据与第一个轮密钥进行异或运算。

主轮
        主轮是AES算法中的主要部分,它包括多轮SubBytes、ShiftRows、MixColumns和AddRoundKey操作。在每一轮中,输入数据都会经过SubBytes、ShiftRows和MixColumns操作,然后再与当前轮密钥进行AddRoundKey操作。主轮的轮数取决于密钥长度,通常为10轮、12轮或14轮。

最终轮
        最终轮与初始轮类似,它将输入数据与最后一个轮密钥进行异或运算,得到加密数据或解密数据。

三、英文文字加解密实现       

        在实现英文文字加解密时,我们需要将字符串转换为字节数组,然后按照AES算法的流程进行加密或解密操作。加密和解密的过程类似,只是在最终轮中使用的轮密钥不同。
       在加密函数中,我们首先将字符串转换为字节数组,并使用PKCS7填充方式对字节数组进行填充,以使其长度为AES.block_size的倍数。然后使用AES算法进行加密,并将加密后的字节数组进行Base64编码,得到加密后的字符串。

         在解密函数中,我们首先将Base64编码的字符串转换为字节数组,并使用AES算法进行解密。然后去除填充部分,得到原始字节数组,并将其转换为字符串。

二、核心程序

clc;
clear;
close all;
warning off;
addpath(genpath(pwd));
rng('default')


% Set 1 data
a{1,1} = 'Alice';
a{1,2} = 'alice123';
a{2,1} = 'Bob';
a{2,2} = 'Bob123';
a{1,3} = [1 1 0 0];
a{2,3} = [1 1 0 0 1 0];

a

%Convert to uint8 format and encrypt
[row col] = size(a);

for i=1:row
    for j=1:col
        if ~ischar(a{i,j})|~isa(a{i,j},'uint8')
            uint8_a = uint8(a{i,j});
            encry_op{i,j} = aescrypt(uint8_a,'test1234');
        else
            encry_op{i,j} = aescrypt(a{i,j},'test1234');
        end
    end
end

encry_op

% uint8_reshape_a = uint8(reshape_a)

%Decryption
[row col] = size(encry_op);

for i=1:row
    for j=1:col
        decry_op{i,j} = aesdecrypt(encry_op{i,j},'test1234');
    end
end

decry_op

%Reconstruct
reconstruct_op = decry_op;
for i=1:row
    for j=1:2
        reconstruct_op{i,j}=char(decry_op{i,j});
    end
end

reconstruct_op
up2111


三、仿真结论


a =

  2×3 cell 数组

    {'Alice'}    {'alice123'}    {[    1 1 0 0]}
    {'Bob'  }    {'Bob123'  }    {[1 1 0 0 1 0]}


encry_op =

  2×3 cell 数组

    {[56 242 193 232 3 101 156 121 193 239 107 75 … ]}    {[   201 85 47 55 184 255 40 26 162 29 186 97 … ]}    {[250 204 162 203 207 59 255 172 172 141 199 … ]}
    {[  54 252 60 128 130 84 72 91 190 106 162 43 … ]}    {[222 74 163 91 95 39 66 38 225 165 97 212 60 … ]}    {[  55 62 72 68 90 192 113 253 57 219 74 207 … ]}


decry_op =

  2×3 cell 数组

    {[65 108 105 99 101]}    {[97 108 105 99 101 49 50 51]}    {[    1 1 0 0]}
    {[        66 111 98]}    {[        66 111 98 49 50 51]}    {[1 1 0 0 1 0]}


reconstruct_op =

  2×3 cell 数组

    {'Alice'}    {'alice123'}    {[    1 1 0 0]}
    {'Bob'  }    {'Bob123'  }    {[1 1 0 0 1 0]}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

fpga和matlab

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

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

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

打赏作者

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

抵扣说明:

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

余额充值