还剩3页未读,继续阅读
文本内容:
信息安全与密码学实验报告序号班级姓名学号日期时间地点信计王志新实验楼110024106403518:00-21:00102指导教师候书会实验名称、上机实验二1实验内容实验四现代对称密码学实验(验证性实验,学时)
4、1AES、实验内容熟悉算法,并实现;A AESAES、测试数据任意,并验证加/解密结果B程序清单程序代码如下所示function plaintext=inv_cipher ciphertext,w,inv_s_box,inv_po1y_mat,vargin ifnargin0%Switch theverbose modeflag onverbose_mode=1;%If thereis nooptional verbose mode argumentelse%Switch theverbose modeflag offverbose_mode=0;end%If the input vectoris a cell arrayor does not have16elementsif iscellciphertext|prod sizeciphertext~=16%Inform userand aborta1ferrorCiphertext hasto bevector not a cell array with16elements.end%If anyelement of theinputvector cannotbe representedby8bitsif anyciphertext0|ciphertext255%Inform userand abort11errorElements ofciphertext vectorhave to be bytes0=ciphertext i=
255.end%If the expanded key array isacellarrray ordoesnothave thecorrect sizeif iscellw|any sizew~=[44,4]%Inform userand abort1ferrorw hasto bean arraynotacellarraywith[44x4]elements.end ifany w0|w255%Inform userand abort11errorElements ofkeyarrayw haveto bebytes0=w i,j=
255.end state=reshape ciphertext,4,4;%Display intermediateresult ifrequested if verbose_mode1disp_hexInitial state:*,stateend round_key=w41:44,%Display intermediateresult ifrequested if verbose_mode1disp_hexInitial round key:round_keyend%Add xorthe current round keymatrix tothe state matrix state=add_round_keystate,round_key;%Loop over9rounds backwardsfor i_round=9:-1:1%Display intermediateresult ifrequested ifverbose_mode!11disp_hex[State atstart ofround Inum2stri_round,:],stateend%Cyclically shiftthe lastthree rowsof the state matrix state=inv_shift_rows state;%Display intermediateresult ifrequested ifverbose_modedisp_hex*After inv_shift_rows:stateend state=sub_bytes state,inv_s_box;%Display intermediateresult ifrequested ifverbose_mode1disp_hexAfter inv_sub_bytes:stateend%Extract the currentround key4x4matrix fromthe expandedkey round_key=w1:4+4*i_round,:*;%Display intermediateresult ifrequested ifverbose_modedisp_hex Round key:round_keyend%Add XORthecurrentroundkeymatrix tothestatematrixstate=add_round_keystate,round_key;ifverbose_mode1disp_hexAfter add_round_key:stateend state=mix_columns state,i nv_po1y_mat;end%Display intermediateresult ifrequested ifverbose_mode1disp_hexState atstart offinal round:stateend%Cyclically shiftthe lastthree rowsofthestatematrixstate=inv_shift_rows state;%Display intermediateresult ifrequested ifverbose_mode1disp_hexAfter inv_shift_rows:stateend state=sub_bytes state,inv_s_box;%Display intermediateresult ifrequested ifverbosemode1disp_hexAfter inv_sub_bytes:stateH Hend%Extract thefirst finalroundkey4x4matrix fromtheexpandedkey round_key=wl:4,:,;%Display intermediateresult ifrequested ifverbose_mode1disp_hexRound key:round_keyend state=add_round_key state,round_key;ifverbose_mode11disp_hexFinal state:,stateend plaintext=reshape state,1,16;function state_out=inv_shift_rows state_in11state_out=cycle state_in,right;11function matrix_out=cycle matrix_in,direction ifstrcmp direction,left1%generate thecolumn vector
[051015],col=0:5:15%If thematrix hastobeshifted tothe right,else1%generate thecolumn vector
[1613107]col=16:-3:7;end%Generate therow vector
[04812]row=0:4:12;cols=repmat col,1,4;rows=repmat row,4,1;ind_mat=mod rows+cols,16+1;matrix_out=matrix_in ind_mat;结果分析二»ciphertext cipherplaintext,w,s_box,poly_mat,Tciphertext=2291215936425901999015518717717215530»plaintext=inv_cipher ciphertext,w,inv_s_box,inv_poly_mat,4*Roundkey:0004080c010509Od0206Oa Oe0307Ob OfFinalstate:88848886898388808884828286868294plaintext=Columns1through15136137136134132131132134136136130130134128130加密结果正确总结:通过第二次的上机实验的学习,对密码学这门课程有了进一步的理解,更加了解了它的实用性同时遇到了一些问题,感觉最难的问题就是所有的数组都要从十六进制转换为二进制或者十进制来进行计算,这些转换给编程带来了非常多的麻烦,尤其是二进制转十六进制,还要将数字转化为字符的形式,细心的观察和学习最后查出了问题经过这个过程之后,对密码学实验的理解更加深刻,收获匪浅。