資源簡介
鏈接: https://pan.baidu.com/s/1YDd-uSEUDqK-x2lIUjBieA 提取碼: ak53 復制這段內容后打開百度網盤手機App,操作更方便哦
按照md5加密算法流程,使用matlab的m語言編寫的md5加密算法。
代碼片段和文件信息
function?digest?=?MD5(text)
%%輸入輸出
%text:輸入任意長度得ascii明文,ascii輸入
%digest:運行md5算法得到得摘要16進制輸出
%運算以小端模式進行
%%相關數據表格
X=[0?1?2?3?4?5?6?7?8?9?10?11?12?13?14?15;%512位分組中x[k]使用順序表
????1?6?11?0?5?10?15?4?9?14?3?8?13?2?7?12;
????5?8?11?14?1?4?7?10?13?0?3?6?9?12?15?2;
????0?7?14?5?12?3?10?1?8?15?6?13?4?11?2?9];
%定義每步迭代中使用的函數
F=inline(‘(b&c)|((~b)&d)‘‘b‘‘c‘‘d‘);
G=inline(‘(b&d)|(c&(~d))‘‘b‘‘c‘‘d‘);
H=inline(‘bitxor(bitxor(bc)d)‘‘b‘‘c‘‘d‘);
I=inline(‘bitxor(cb|(~d))‘‘b‘‘c‘‘d‘);
%循環移位表
Cyclic=[7?12?17?22;5?9?14?20;4?11?16?23;6?10?15?21];
%緩沖區初始化
%A=0x67452301B=0xefcdab89C=0x98badcfeD=0x10325476小端模式數據
A=1732584193;B=4023233417;C=2562383102;D=271733878;%對應10進制數據
%%?數據填充
L_ascii?=?length(text);%獲取明文長度
L_fill?=?(448-mod(L_ascii*8512))/8;%待填充字節數
L_total?=?L_ascii+L_fill+8;
if?L_fill<0%再擴充一段
????L_total?=?L_total+64;
????L_fill?=?L_fill+64;
end
L_text?=?L_ascii*8;%數據bit數長度,假設數據長度暫不會超過2^64位
text_buf?=?zeros(1L_total);%數據以字節存儲
for?i=1:L_ascii%文字讀入
????text_buf(i)?=?char(text(i));
end
text_buf(L_ascii+1)?=?128;%填充0x80
for?i=2+L_ascii:L_ascii+L_fill%填0
????text_buf(i)?=?0;
end
for?i=1:8%填充長度
????bits?=?bitget(L_texti*8:-1:i*8-7);bits_str?=?num2str(bits);pos?=?bits_str~=‘?‘;
????text_buf(L_total-8+i)=bin2dec(bits_str(pos));
end
%%?摘要運算
L_cycle?=?L_total/64;%總共需要的運算輪數
for?i=1:L_cycle
????A0_tmp=A;B0_tmp=B;C0_tmp=C;D0_tmp=D;%數據暫存
????XK=reshape(text_buf((i-1)*64+1:i*64)416);
????for?j=1:4%四輪運算
???????switch?j%選擇處理用的邏輯函數
????????????case?1?
????????????????f=F;
????????????case?2?
????????
評論
共有 條評論