matlab求DES,基于matlab的des算法

41528d3028836879cd698677c3999917.gif基于matlab的des算法

密码学与网络安全课程实验利用 Matlab 语言实现 DES 加密算法姓名: ZA 学号: XXXXX一、 实验目的1) 牢固掌握 DES 密码算法2) 通过编程实现 DES 算法,深入掌握现代密码算法实现的基本方法3) 验证 DES 算法中各个模块在实现混淆和弥散中的作用二、 实验内容要求1) DES 算法实现:利用 Matlab 语言实现 DES 密码算法,输入 64 比特明文和 56 比特密钥,加密得到 64 比特的密文;2) DES 弱密钥验证:观察弱密钥两次加密的结果,与非弱密钥两次加密的结果进行比较;3) DES 算法初步应用:尝试加密一个字符串,字符串的长度大于 8 个字节;4) DES 弥散特性分析:试输出每一轮加密得到的比特序列,并比较当初始明文 1 个比特发生变化时,每一轮加密输出的哪些比特发生变化。三、 实验方案与步骤3.1 DES 算法实现a) 算法实现方案Matlab(矩阵实验室)是一款工程计算用的软件,功能十分强大。Matlab 的计算基于矩阵,而 DES 算法用矩阵描述是十分简洁方便的。因此,选用 Matlab 作为算法实现语言,基于一系列的矩阵变换、运算来实现 DES 算法的加密。b) 主要功能实现流程及代码解析1) 加密程序图 1 DES 基本结构+ F第 1轮L1 R1+ F第 i轮Li Ri+ F第 n轮Ln RnK1KiKn明 文 (2W比 特 )W比 特 W比 特L0 R0密 文 (2W比 特 )选择扩展运算E+选择压缩运算S置换运算P+Li RiRi-1Li-1Ki483248 32483232DES 算法的结构非常简单,是一个 16 次的迭代。核心是 函数中一系列变换。f根据算法框图,程序步骤主要分为三大部分:1) 输入明文和密钥进行字符转换2) 产生 16 轮密钥矩阵3) 16 轮迭代%%demo5.mclc, clear all;%%%----------第一步 输入明文和密钥-------------%M= 0123456789ABCDEF ;% K= 0123456789ABCDEF ;%MB=[]; for i=1:16Mi=M(i);MBi=[ 0000 ,dec2bin(hex2dec(Mi))];MBi=MBi(end-3:end);MBi=[str2num(MBi(1)),str2num(MBi(2)),str2num(MBi(3)),str2num(MBi(4))];MB=[MB,MBi];endM=MB;% 转化为64 位二进制明文KB=[];for i=1:16Ki=K(i);KBi=[ 0000 ,dec2bin(hex2dec(Ki))];KBi=KBi(end-3:end);KBi=[str2num(KBi(1)),str2num(KBi(2)),str2num(KBi(3)),str2num(KBi(4))];KB=[KB,KBi];endK=KB;% 转化为64 位二进制密钥%%%----------第三步 产生密钥-------------%PC_1=[57,49,41,33,25,17,9,1,58,50,42,34,26,18,10,2,59,51,43,35,27,19,11,3,60,52,44,36,63,55,47,39,31,23,15,7,62,54,46,38,30,22,14,6,61,53,45,37,29,21,13,5,28,20,12,4];%PC_1置换矩阵 56位KEY0=K(PC_1);% 初始矩阵变换 64 to 56%循环移位>>>>>shift_array=-[1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1]; C(1,:)=KEY0(1:28);%C0D(1,:)=KEY0(29:56);%D0for i=2:17C(i,:)=circshift(C(i-1,:) ,shift_array(i-1)) ; %前28 位循环移位%circshift是右移 移动负数位表示左移D(i,:)=circshift(D(i-1,:) ,shift_array(i-1)) ; %后28 位循环移位endPC2=[14,17,11,24,1,5,3,28,15,6,21,10,23,19,12,4,26,8,16,7,27,20,13,2,41,52,31,37,47,55,30,40,51,45,33,48,44,49,39,56,34,53,46,42,50,36,29,32];Ki=zeros(16,48);%循环移位>>>>>KEY_MAT=[C,D];%17*56KEY_MAT=KEY_MAT(2:17,:);%16*56PC_2=[14,17,11,24,1,5,3,28,15,6,21,10,23,19,12,4,26,8,16,7,27,20,13,2,41,52,31,37,47,55,30,40,51,45,33,48,44,49,39,56,34,53,46,42,50,36,29,32]; for i=1:16Ki(i,:)=KEY_MAT(i,PC_2);endKEY=Ki;%%%----------第四步 Feistel结构-------------%IP=[58 50 42 34 26 18 10 2 60 52 44 36 28 20 12 4 62 54 46 38 30 22 14 6 64 56 48 40 32 24 16 8 57 49 41 33 25 17 9 1 59 51 43 35 27 19 11 3 61 53 45 37 29 21 13 5 63 55 47 39 31 23 15 7];%IP初始置换矩阵M=M(IP);%初始置换m0_L=M(1:32); %输入的左半部分明文m0_R=M(33:64);% 输入的右半部分明文 [L,R]=fchange(m0_L,m0_R,1,KEY);mi=[L,R];mi2_hex(1,:)=mi%%进入16 轮迭代> for i=2:16[L,R]=fchange(L,R,i,KEY);mi=[L,R];mi2_hex(i,:)=miendIP_1=[40 8 48 16 56 24 64 32 39 7 47 15 55 23 63 31 38 6 46 14 54 22 62 30 37 5 45 13 53 21 61 29 36 4 44 12 52 20 60 28 35 3 43 11 51 19 59 27 34 2 42 10 50 18 58 26 33 1 41 9 49 17 57 25];%%IP_1初始逆置换矩阵m16=[R,L];% 最后一步进行交换C=m16(IP_1); %IP逆置换[m_hex]=m_2_hex(C)% 转化为16进制 输出密文%%%%fchange.mfunction [Li,Ri] = fchange(Li_1,Ri_1,m,KEY)%%第 i轮f 函数的实

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值