%%% SHA_1 算法
clear;
clc;
srl_size = 512; %%% block的长度
rsv_len = 64; %%% 保留字的长度
%%%Checked
H0 = de2bi(1732584193,32,'left-msb'); %%67452301
H1 = de2bi(4023233417,32,'left-msb'); %%EFCDAB89
H2 = de2bi(2562383102,32,'left-msb'); %%98BADCFE
H3 = de2bi(271733878,32,'left-msb'); %%10325476
H4 = de2bi(3285377520,32,'left-msb'); %%C3D2E1F0
%%%Checked
K0 = de2bi(1518500249,32,'left-msb'); % 0 <= t <= 19; %%5a827999
K1 = de2bi(1859775393,32,'left-msb'); % 20 <= t <= 39; %%6ed9eba1
K2 = de2bi(2400959708,32,'left-msb'); % 40 <= t <= 59; %%8f1bbcdc
K3 = de2bi(3395469782,32,'left-msb'); % 60 <= t <= 79; %%ca62c1d6
%%%单个block作为数据源
% src_len = 24; %%% 信息位的长度
% src = de2bi( 6382179 , src_len, 'left-msb'); %% abc 616263
%
% %%%多个block作为数据源
% %%% 一个448bit的数据
% % src_len = 448;
% % src(1:32) = de2bi( hex2dec('61626364'),32, 'left-msb');
% % src(32*1+1:32*2) = de2bi( hex2dec('62636465'),32, 'left-msb');
% % src(32*2+1:32*3) = de2bi( hex2dec('63646566'),32, 'left-msb');
% % src(32*3+1:32*4) = de2bi( hex2dec('64656667'),32, 'left-msb');
% % src(32*4+1:32*5) = de2bi( hex2dec('65666768'),32, 'left-msb');
% % src(32*5+1:32*6) = de2bi( hex2dec('66676869'),32, 'left-msb');
% % src(32*6+1:32*7) = de2bi( hex2dec('6768696a'),32, 'left-msb');
% % src(32*7+1:32*8) = de2bi( hex2dec('68696a6b'),32, 'left-msb');
% % src(32*8+1:32*9) = de2bi( hex2dec('696a6b6c'),32, 'left-msb');
% % src(32*9+1:32*10) = de2bi( hex2dec('6a6b6c6d'),32, 'left-msb');
% % src(32*10+1:32*11) = de2bi( hex2dec('6b6c6d6e'),32, 'left-msb');
% % src(32*11+1:32*12) = de2bi( hex2dec('6c6d6e6f'),32, 'left-msb');
% % src(32*12+1:32*13) = de2bi( hex2dec('6d6e6f70'),32, 'left-msb');
% % src(32*13+1:32*14) = de2bi( hex2dec('6e6f7071'),32, 'left-msb');
%
% blk_num = ceil( src_len / 447) ; %block的个数;448对应于两个block
%
% %%%Checked
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%块填充 begin
% block = de2bi(zeros(1,srl_size * blk_num));
% block(1 : src_len) = src;
% block(src_len + 1) = de2bi(1);
% % CEIL(X) rounds the elements of X to the nearest integers towards infinity.
% len_bin = de2bi(src_len,ceil(log2(src_len)),'left-msb').'; %%src_len需要的bit表示数
% block( srl_size * blk_num - length(len_bin) + 1 : srl_size * blk_num ) = len_bin;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%块填充 end
%%%%%%%%DS2432 needs no block_padding process
blk_num = 1;
%%%Read Authenticated Page
% src(1:32) = de2bi( hex2dec('01234567'),32, 'left-msb'); % secret0~3
% src(32*1+1:32*2) = de2bi( hex2dec('00000000'),32, 'left-msb');
% src(32*2+1:32*3) = de2bi( hex2dec('00000000'),32, 'left-msb');
% src(32*3+1:32*4) = de2bi( hex2dec('00000000'),32, 'left-msb');
% src(32*4+1:32*5) = de2bi( hex2dec('00000000'),32, 'left-msb');
% src(32*5+1:32*6) = de2bi( hex2dec('00000000'),32, 'left-msb');
% src(32*6+1:32*7) = de2bi( hex2dec('00000000'),32, 'left-msb');
% src(32*7+1:32*8) = de2bi( hex2dec('00000000'),32, 'left-msb');
% src(32*8+1:32*9) = de2bi( hex2dec('00000000'),32, 'left-msb');
% src(32*9+1:32*10) = de2bi( hex2dec('ffffffff'),32, 'left-msb');
% src(32*10+1:32*11) = de2bi( hex2dec('403392ac'),32, 'left-msb');
% src(32*11+1:32*12) = de2bi( hex2dec('ca000000'),32, 'left-msb');
% src(32*12+1:32*13) = de2bi( hex2dec('89abcdef'),32, 'left-msb'); % secret4~7
% src(32*13+1:32*14) = de2bi( hex2dec('a5265c80'),32, 'left-msb');
% src(32*14+1:32*15) = de2bi( hex2dec('00000000'),32, 'left-msb');
% src(32*15+1:32*16) = de2bi( hex2dec('000001b8'),32, 'left-msb'); % 000000b8
%%%%%从DS2432中返回的信息;
src(1:32) = de2bi( hex2dec('01234567'),32, 'left-msb'); % secret0~3
src(32*1+1:32*2) = de2bi( hex2dec('00000000'),32, 'left-msb');
src(32*2+1:32*3) = de2bi( hex2dec('00000000'),32, 'left-msb');
src(32*3+1:32*4) = de2bi( hex2dec('00000000'),32, 'left-msb');
src(32*4+1:32*5) = de2bi( hex2dec('00000000'),32, 'left-msb');
src(32*5+1:32*6) = de2bi( hex2dec('00000000'),32, 'left-msb');
src(32*6+1:32*7) = de2bi( hex2dec('00000000'),32, 'left-msb');
src(32*7+1:32*8) = de2bi( hex2dec('00000000'),32, 'left-msb');
src(32*8+1:32*9) = de2bi( hex2dec('00000000'),32, 'left-msb');
src(32*9+1:32*10) = de2bi( hex2dec('ffffffff'),32, 'left-msb');
src(32*10+1:32*11) = de2bi( hex2dec('40b36bc4'),32, 'left-msb'); % 40 + family num+ SN0~SN1
src(32*11+1:32*12) = de2bi( hex2dec('8b424700'),32, 'left-msb'); % SN2~SN5
src(32*12+1:32*13) = de2bi( hex2dec('89abcdef'),32, 'left-msb'); % secret4~7
src(32*13+1:32*14) = de2bi( hex2dec('a5265c80'),32, 'left-msb'); %channege
src(32*14+1:32*15) = de2bi( hex2dec('00000000'),32, 'left-msb');
src(32*15+1:32*16) = de2bi( hex2dec('000001b8'),32, 'left-msb'); % 000000b8
for(blk_cnt = 1: blk_num)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%压缩计算 begin
%%%80*32的bit矩阵初始化
for(i=1:80)
W(i,:) = de2bi(zeros(1,32));
% W_see(i,:) = de2bi(zeros(1,32));
end
%%%checked
for(i=1:16)
% W(i,:) = block(1+32*(i-1)+ (blk_cnt-1)*srl_size : 32*i +
% (blk_cnt-1)*srl_size );
W(i,:) = src(1+32*(i-1):32*i);
end
for(t=17:80)
W_mid1 = bitxor(W(t-3,:),W(t-8,:));
W_mid2 = bitxor(W(t-14,:),W_mid1);
W_mid = bitxor(W(t-16,:),W_mid2);
%%%循环左移1位
shift_num = 1 ;
for(ii = 1:shift_num)
W_lshift(32 - shift_num + ii) = W_mid(ii);
end
for( ii = 1: 32 - shift_num )
W_lshift(ii) = W_mid(ii + shift_num);
end
W(t,:) = W_lshift;
W_see = dec2hex(bi2de(W(t,:),'left-msb'));
end
A = H0;
B = H1;
C = H2;
D = H3;
E = H4;
INV = de2bi(4294967295,32,'left-msb'); %全FFFFFFFF,用于异或求反;
for(tt = 1:80)
%%%A循环左移5位
shift_num = 5 ;
for(ii = 1:shift_num)
A_lshift(32 - shift_num + ii) = A(ii);
end
for( ii = 1: 32 - shift_num )
A_lshift(ii) = A(ii + shift_num);
end
%%%计算f(B,C,D)函数 和 K的分配
if( tt < 21) %% 1~20 f(B,C,D) =( B^C )V ( (~B) ^ D)
mid1 = bitand(B , C); %B^C
mid2 = bitxor(INV,B); %B取反 ~B
mid3 = bitand(mid2,D); % ~B^D
f = bitor(mid1,mid3); % (B^C)V (~B^D)
K = K0;
else if( tt < 41) %% 21~40 f(B,C,D) = B xor C xor D
mid1 = bitxor(B , C); % B xor C
f = bitxor(mid1 , D); % B xor C xor D
K = K1;
else if(tt <61) %% 41~60 f(B,C,D) =( B^C )V ( B ^ D) V (C^D)
mid1 = bitand(B , C); % B^C
mid2 = bitand(B , D); % B ^ D
mid3 = bitand(C , D); % C^D
mid4 = bitor(mid1 , mid2);
f = bitor(mid4 , mid3);
K = K2;
else
mid1 = bitxor(B , C);
f = bitxor(mid1 , D);
K= K3;
end
end
end
%%%模2^32的加法
mid1 = mod(bi2de(A_lshift,'left-msb') + bi2de(f,'left-msb'),2^32);
mid2 = mod(bi2de(E,'left-msb') + bi2de(W(tt,:),'left-msb'),2^32);
mid3 = mod(mid1 + mid2,2^32);
TEMP = mod(mid3 + bi2de(K,'left-msb'), 2^32);
E = D;
D = C;
%%%循环左移30次
shift_num = 30;
for(ii = 1:shift_num)
B_lshift(32 - shift_num + ii) = B(ii);
end
for( ii = 1: 32 - shift_num )
B_lshift(ii) = B(ii + shift_num);
end
C = B_lshift;
B = A;
A = de2bi(TEMP,32,'left-msb');
A_see = dec2hex(TEMP);
B_see = dec2hex(bi2de(B,'left-msb'));
C_see = dec2hex(bi2de(C,'left-msb'));
D_see = dec2hex(bi2de(D,'left-msb'));
E_see = dec2hex(bi2de(E,'left-msb'));
% if(tt == 79)
% disp(A_see);
% end
end
%%%%%%更新H0~H4
H0_add = mod( bi2de(H0,'left-msb') + bi2de(A,'left-msb'),2^32);
H0 = de2bi(H0_add,32,'left-msb');
H0_see = dec2hex(H0_add);
H1_add = mod( bi2de(H1,'left-msb') + bi2de(B,'left-msb'),2^32);
H1 = de2bi(H1_add,32,'left-msb');
H1_see = dec2hex(H1_add);
H2_add = mod( bi2de(H2,'left-msb') + bi2de(C,'left-msb'),2^32);
H2
SHA_1.rar_SHA_SHA-1 matlab_matlab encryption_加密_加密算法
版权申诉
3星 · 超过75%的资源 100 浏览量
2022-09-19
18:43:07
上传
评论 1
收藏 2KB RAR 举报
寒泊
- 粉丝: 75
- 资源: 1万+
最新资源
- 课设毕设基于SSM的旅游景点线路网站 LW+PPT+源码可运行.zip
- EDA实验计数器CNT9999-DTCNT9999实验源代码
- 课设毕设基于SSM的抗疫医疗用品销售平台 LW+PPT+源码可运行.zip
- 基于Halcon的仿照VisonPro的机器视觉软件.zip
- battery-percentage-detector 使用 Javascript 的电池百分比检测器
- 毕业设计基于Qt+FFmpeg+SDL实现的音视频播放器源码.zip
- 课设毕设基于SSM的固定资产管理系统 LW+PPT+源码可运行.zip
- 课设毕设基于SSM的个人交友网站 LW+PPT+源码可运行.zip
- 课设毕设基于SSM的高校信息资源共享平台 LW+PPT+源码可运行.zip
- 课设毕设基于SSM的高校二手交易平台 LW+PPT+源码可运行.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
评论2