欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    2022年密码学课程方案AES加密解密文档.docx

    • 资源ID:12931719       资源大小:510.49KB        全文页数:20页
    • 资源格式: DOCX        下载积分:4.3金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要4.3金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    2022年密码学课程方案AES加密解密文档.docx

    精品学习资源个人资料整理 仅限学习使用成 都 信 息 工 程 学 院课 程 设 计 报 告AES加密解密的实现课程名称:应用密码算法程序设计同学姓名: 同学学号: 专业班级: 任课老师:年月 日欢迎下载精品学习资源附件: 课程设计成果评判表个人资料整理 仅限学习使用指导老师评阅成果表欢迎下载精品学习资源欢迎下载精品学习资源学习与工作态度 <30%)选题意义<10%)文献综述<10%)讨论水平与设计才能 <20%)课程设计说明说 <论文)撰写质量 <20%)设计创新<10%)总分欢迎下载精品学习资源指导老师签名:年月日课程设计答辩记录及评判表同学 叙述情形老师主要提问记录同学回答疑题情形欢迎下载精品学习资源选题意义值10优9良8中7及格6差4文献综述1098764讨论水平与设计才能课程设计说明书 <论文)撰写质量202019191717151513131010设计创新1098764答辩成效302825221915评分工程分评判参考标准评分总分欢迎下载精品学习资源答辩评分答辩小组成员签名答辩小组组长签名:年月日课程设计成果评定表评分工程评分比例分数课程设计总分欢迎下载精品学习资源成果汇总指导老师评分50%答辩小组评分50%欢迎下载精品学习资源目录欢迎下载精品学习资源1. 背景AES ,密码学中的高级加密标准 <Advanced Encryption Standard, AES ),又称 Rijn dael 加密法,是美国联邦政府采纳的一种区块加密标准;这个标准用来替代原先的DE S ,已经被多方分析且广为全世界所使用;经过五年的甄选流程,高级加密标准由美国国家标准与技术讨论院 <NIST )于 2001 年 11 月 26 日发布于 FIPS PUB 197 ,并在 2002 年 5 月 26 日成为有效的标准;2006年,高级加密标准已然成为对称密钥加密中最流行的算法之一;AES 有一个固定的128 位的块大小和128 , 192 或 256 位大小的密钥大小;该算法为比利时密码学家JoanDaemen和 VincentRijmen所设计,结合两位作者的名字,以Rijndael之命名之,投稿高级加密标准的甄选流程;<Rijdael的发音近于 "Rhinedoll" ;) AES在软体及硬件上都能快速地加解密,相对来说较易于实作, 且只需要很少的记忆体;作为一个新的加密标准, 目前正被部署应用到更广大的范畴.2. 系统设计2.1 系统主要目标基本要求部分:1. 在深化懂得 AES 加密 /解密算法理论的基础上,设计一个AES 加密 /解密软件系统;2. 完成一个明文分组的加解密,明文和密钥是十六进制,长度都为64 比特<16 个 16 进制数),输入明文和密钥,输出密文,进行加密后,能够进行正确的解密;3. 程序运行时,要求输出每一轮使用的密钥,以及每一轮加密或解密之后的16 进制表示的值;4. 要求供应所设计系统的报告及完整的软件;较高要求部分:1. 假如明文不止一个分组,程序能完成分组,然后加密;最终一个分组长度不足时要求完成填充;密钥长度不足时能进行填充,过长就自动截取前面部分;2. 密钥采纳 ASCII 码,明文要求输入信息可以是文字<可以是汉字或英文,信息量要求不止一个加密分组长度),任意字符,或者是文本文档,或者一般文件;进行加密后,能够进行正确的解密;3. 程序代码有比较好的结构,模块划分合理,如用类进行封装,通过调用类的成员函数实现加密解密功能,函数的参数及返回值设置合理等;欢迎下载精品学习资源4. 界面友好,程序实现有新意;2.2 主要软件需求 <运行环境)本软件适用 VC语言编写,编译胜利后的EXE文件可以在装有 windows 系统的任何运算机上使用;测试平台: Windows XP Professional使用软件: Visual C+ 6.02.3 功能模块与系统结构主要功能模块如下:1. 字节替换 SubByteB0,0B0,1B0,2B0,3B1,0B1,1B1,2B1,3B2,0B2,1B2,2B2,3B3,0B3,1B3,2B3,3A0,0A0,1A0,2A0,3A1,0A1,1A1,2A1,3欢迎下载精品学习资源A2, 0A2,1A2,2A2,3欢迎下载精品学习资源A3,0A3,1A3,2A3,3S盒>1. 取逆2. 仿射变换2. 行移位 ShiftRow3. 列混合 MixColumn欢迎下载精品学习资源4. 轮密钥加 AddRoundKey5. 逆字节替换通过逆 S 盒的映射变换得到6. 逆行移位 InvShiftRow与加密时的行移位区分在于移位方向相反;7. 逆列混淆加密与解密系统流程图如下所示,欢迎下载精品学习资源读进明文读进密钥(1) 产生轮子密钥(2) AddRoundKey 变换欢迎下载精品学习资源3 系统功能程序设计3.1 基本要求部分3.1.1 字节替换(3) 轮变换RoundState,RoundKeyByteSubState;ShiftRowState;Nr1MixColumnState; AddRoundKeyState,RoundKey;(4) 最终轮变换FinalRoundState,RoundKeyByteSubState ShiftRowStateAddRoundKeyState,RoundKey;密文欢迎下载精品学习资源SubBytes<)变换是一个基于S 盒的非线性置换,它用于将输入或中间态的每一个字节通过一个简洁的查表操作,将其映射为另一个字节;映射方法是把输入字节的高四位作为S 盒的行值,低四位作为列值,然后取出S 盒中对应的行和列的元素作为输出;unsigned char subbytesunsigned char state44>printf"after subbyte:n">;/取出中间态 state 映射到 S 盒中的值赋给中间态state fori=0 ; i<4 ;i+>欢迎下载精品学习资源forj=0 ;j<4 ;j+> stateij=sboxstateij; fori=0 ;i<4 ; i+>/ 输出到屏幕显示 stateforj=0 ;j<4 ;j+>printf"tt%02x ",stateij>;printf"n"> ;printf"n"> ;return 0;3.1.2 行移位ShiftRows< )完成基于行的循环移位操作,变换方法是第0 行不动,第一行循环左移一个字节,其次位循环左移两个字节,第三行循环左移三个字节;unsigned char shiftrowsunsigned char state44>printf"after shiftrows:n">;/ 在中间态的行上,k=state10 ;/ 第 0 行不变state10=state11 ;/ 第一行循环左移一个字节state11=state12 ;/ 其次行循环左移两个字节state12=state13 ;/ 第三行循环左移三个字节state13=k ;k=state20 ;state20=state22 ;state22=k ;k=state21 ;state21=state23 ;state23=k ;k=state30 ;state30=state33 ;state33=state32 ;state32=state31 ;state31=k ;fori=0 ; i<4 ;i+>/ 输出到屏幕显示stateforj=0 ;j<4 ;j+> printf"tt%02x ",stateij>;printf"n"> ;printf"n"> ;return 0;3.1.3 列混合MixColumns< )实现逐列混合,方法是sx>=cx>*sx>modx4+1>欢迎下载精品学习资源unsigned char mixcolumnsunsigned char state44> printf"after mixcolumns:n">;/ 实现 02 03 01 01>与中间态 state分别相乘后异或得相应值fori=0 ; i<4 ;i+>/01 02 03 01>/01 01 02 03>k=state0i ; /03 01 01 02>temp0 = state0i state1i state2i state3i;temp1 = state0i state1i; temp1 = xtimetemp1>; state0i = temp1 temp0 ;temp1 = state1i state2i; temp1 = xtimetemp1>; state1i = temp1 temp0 ;temp1 = state2i state3i; temp1 = xtimetemp1>; state2i = temp1 temp0 ;temp1= state3ik; temp1= xtimetemp1> ; state3i=temp1 temp0 ;fori=0 ;i<4 ;i+>/ 输出到屏幕显示 stateforj=0 ;j<4 ;j+> printf"tt%02x ",stateij>;printf"n"> ;printf"n"> ;return 0;3.1.4 轮密钥加AddRoundKey> 用于将输入或中间态S 的每一列与一个密钥字ki 进行按位异或,每一个轮密钥由 Nb 个字组成;unsigned char addroundkeyunsigned char state44,unsigned char w44>printf"addroundkey %d:n",round+>;/将中间态 state中的每一列与一个密钥字w44 中的一列 >进行按位异或fori=0 ; i<4 ;i+>/ 完了又赋值给stateforj=0 ;j<4 ;j+> stateij=wij;fori=0 ; i<4 ;i+>/ 输出到屏幕显示出来stateforj=0 ;j<4 ;j+> printf"tt%02x ",stateij>;printf"n"> ;printf"n"> ;return 0;欢迎下载精品学习资源3.1.5 密钥扩展通过生成器产生 Nr+1 个轮密钥,每个轮密钥由 Nb 个字组成,共有 Nb<Nr+1 )个字;在加密过程中,需要 Nr+1 个轮密钥,需要构造 4<Nr+1 )个 32 位字;第一将输入的 4 个字节直接复制到扩展密钥数组的前 4 个字中,得到 W0,W1,W2,W3 ;然后每次用 4 个字填充扩展密钥数余下的部分;/keyexpandprintf"after keyexpand:n">;fori=4 ; i<8 ;i+>ifi%4=0> rotword0=w1i-1;rotword1=w2i-1;rotword2=w3i-1;rotword3=w0i-1;printf"rotword>:">;forj=0 ;j<4 ;j+> printf"%02x ",rotwordj>;forj=0 ;j<4 ;j+> subwordj=sboxrotwordj;printf"nsubword>:">;forj=0 ;j<4 ;j+> printf"%02x ",subwordj>; printf"nn"> ;forj=0 ;j<4 ;j+>rconj=subwordj RconNj;printf"after Rcon>:">;forj=0 ;j<4 ;j+> printf"%02x ",rconj>;printf"nn"> ;forj=0 ;j<4 ;j+> wji%4=rconj wji-4;欢迎下载精品学习资源count+ ;printf"w%d :",count>;forj=0 ;j<4 ;j+> printf" %02x ",wji%4>;欢迎下载精品学习资源欢迎下载精品学习资源elseforj=0 ; j<4 ;j+> wji%4=wji%4wji%4>-1;欢迎下载精品学习资源printf"w%d :",count>;forj=0 ; j<4 ;j+>printf" %02x ",wji%4>;count+ ;欢迎下载精品学习资源printf"nn"> ;printf" 密钥扩展 Round key:n"> ;fori=0 ;i<4 ;i+>forj=0 ;j<4 ;j+>printf"tt%02x ",wij>;printf"n"> ; printf"n"> ;3.1.6 逆字节替换与字节代替类似,逆字节代替基于逆S 盒实现;unsigned char InvSubbytesunsigned char state44>fori=0 ; i<4 ;i+>/ 基于逆 S 盒的映射替代forj=0 ;j<4 ;j+> stateij = rsboxstateij;printf"after InvSubbyte:n">;fori=0 ;i<4 ;i+>forj=0 ;j<4 ;j+>/ 输出到屏幕显示 state printf"tt%02x ",stateij>;printf"n"> ;printf"n"> ;return 0;3.1.7 逆行移位与行移位相反,逆行移位将态state 的后三行按相反的方向进行移位操作,即第0 行保持不变,第 1 行循环向右移一个字节,第2 行循环向右移动两个字节,第3 行循环向右移动三个字节;unsigned char InvShiftRowsunsigned char state44>k=state13 ;state13=state12 ;/对中间态 state进行移位操作state12=state11 ;/ 第 0 行保持不变state11=state10 ;/ 第 1 行循环右移一个字节state10=k ;/ 第 2 行循环右移两个字节/ 第 3 行循环右移三个字节k=state20 ;state20=state22 ;state22=k ;k=state21 ;state21=state23 ;state23=k ;k=state30 ;欢迎下载精品学习资源state30=state31 ;state31=state32 ;state32=state33 ;state33=k ;printf"after InvShiftRows:n">;fori=0 ;i<4 ;i+>/ 输出到屏幕显示 stateforj=0 ;j<4 ;j+> printf"tt%02x ",stateij>;printf"n"> ;printf"n"> ;return 0;3.1.8 逆列混合逆列混淆的处理方法与MixColumns< )类似,每一列都通过与一个固定的多项式dx> 相乘进行交换;unsigned char InvMixColumnsunsigned char state44>printf"after InvMixColumns :n">;/ 实现 0e 0b 0d 09> 与中间态 state 分别相乘后异或得相应值fori=0 ;i<4 ;i+>/09 0e 0b 0d>temp0 = state0i; /0d 09 0e 0b>temp1 = state1i; /0b 0d 09 0e>temp2 = state2itemp3 = state3i;state0i= Multiplytemp0,0x0e> Multiplytemp1,0x0b> Multiplytemp2,0x0d> Multiplytemp3, 0x09>;state1i= Multiplytemp0,0x09>Multiplytemp1,0x0e>Multiplytemp2,0x0b> Multiplytemp3, 0x0d>;state2i= Multiplytemp0,0x0d>Multiplytemp1,0x09>Multiplytemp2,0x0e> Multiplytemp3, 0x0b>;state3i= Multiplytemp0,0x0b>Multiplytemp1,0x0d>Multiplytemp2,0x09> Multiplytemp3, 0x0e>;fori=0 ; i<4 ;i+>/ 输出到屏幕显示stateforj=0 ;j<4 ;j+> printf"tt%02x ",stateij>;printf"n"> ;printf"n"> ;return 0;3.1.9 加密加密部分我分了两种情形,一种是自动检查加密程序的正确性,之前在程序里给明文和密钥赋上初值,运行程序检验结果是否正确;另一种是用户手动欢迎下载精品学习资源输入 32 位的十六进制数,进行加密,我是把每一详细项模块化,将功能在每个详细模块中实现,只需要直接调用,视觉成效强,一目了然;下面是实现加密功能一些关键代码void AES_encryptunsigned char StateN, unsigned char RoundKeyN>message16=0x32,0x43,0xf6,0xa8,0x88,0x5a,0x30,0x8d,0x31,0x31,0x98,0xa2,0xe0,0x37,0x0 7,0x34 ;key16=0x2b,0x7e,0x15,0x16,0x28,0xae,0xd2,0xa6,0xab,0xf7,0x15,0x88,0x09,0xcf,0x4f,0x3c;fori=0 ; i<4 ;i+>forj=0;j<4 ;j+>/ 分别猎取明文和密钥stateji=messagem;wji=keym;m+ ;.addroundkeystate,w> ;forround=2 ;round<11; round+>printf" 第 %d 轮加密 : n",round> ;subbytesstate>;shiftrowsstate> ;mixcolumnsstate> ;keyexpandw, round> ;addroundkeystate,w> ;subbytesstate>;/ 最终一轮shiftrowsstate> ;keyexpandw, 10> ;addroundkeystate,w> ;3.1.10 解密AES 解密我也是分成了两个部分,第一部分是在程序中对密文和密钥赋初值,通过与标准对比检查解密过程的正确性;其次部分是用户手动输入密文和密钥,程序对其进行解密,得到最终的明文;解密过程基本如下:1)猎取输入的明文和密钥2 )通过密钥扩展过程猎取各轮密钥3 )轮密钥加变换过程 4)逆行移位5)逆字节替代 6)轮密钥加变换7)逆列混淆47 步共 9 次循环,最终一轮实现46 步,完成解密过程;主要代码如下:void AES_decryptunsigned char StateN, unsigned char wN>key16=0x2b,0x7e,0x15,0x16,0x28,0xae,0xd2,0xa6,0xab,0xf7,0x15,0x88,0x09,0xcf,0x4f,0x3c ;cipher16=0x39,0x25,0x84,0x1d,0x02,0xdc,0x09,0xfb,0xdc,0x11,0x85,0x97,0x19,0x6a,0x0b,0 x32 ;printf"%02x ",keyi>;printf"n"> ;/猎取密文和密钥fori=0 ;i<4 ; i+>forj=0 ;j<4 ;j+>stateji=cipherm;wji=keym;m+ ;Keyexpandw,round > ; / 获得密钥扩展列表AddRoundKeyState, w> ; / 首轮欢迎下载精品学习资源for i = 9 ; i > 0 ; i ->/1-9 轮InvShiftRowsstate> ;InvSubbytesstate> ;Keyexpandw,round > ;AddRoundKeyState, w> ;InvMixColumnsState> ;InvShiftRowsState> ; / 最终一轮InvSubBytesState> ;Keyexpandw,0 > ;AddRoundKeyState, w> ;4. 测试报告为检验程序的正确性,需要将结果与标准相对比;参照老师课件里的行结果,与我的运行结果对比如下:下面是我的运行界面:AES 运行程序的运欢迎下载精品学习资源欢迎下载精品学习资源上面的是标准,接着的是我的运行测试,下面的是我从终端中复制的过程:密钥扩展 Round key:efa8b6db4452710ba55b25ad417f3b00addroundkey 5 :e0c8d9859263b1b87f63e835c0be5001第 6 轮加密 :after subbyte:4fe1fbe8c8356c97d2fb96ae9bba537cafter shiftrows:e1e83597fbc86c4f7c969baebad253fbafter mixcolumns:25d1 a9bd 11d1b6 3a4c 334cc0ad688eb0after keyexpand: rotword>:0b ad 00 db subword>:2b 95 63 b9after Rcon>:3b 95 63 b9 w20 : d4d1c6f8 w21 : 7c839d87欢迎下载精品学习资源w22 : caf2b8bc w23 : 11f915bc密钥扩展 Round key:d47cca11d183f2f9c69db815f887bcbcaddroundkey 6 :f1c17c5d0092c8b56f4c8bd555ef320c第 7 轮加密 :after subbyte:a178104c634fe8d5a8293d03fcdf23feafter shiftrows:a178104c4fe83dd50363a829fefcdf23after mixcolumns:4b2c3337864a9dd28d89f4186d80e8d8after keyexpand: rotword>:f9 15 bc 11subword>:99 59 65 82after Rcon>:b9 59 65 82w24 : 6d88a37aw25 : 110b3efdw26 : dbf98641w27 : ca0093fd密钥扩展 Round key:6d 88110bdb f9ca 007aa3fd3e 4186fd93addroundkey 7 :欢迎下载精品学习资源263de8fd0e4164d22eb7728b177da925第 8 轮加密 :after subbyte:f7279b54ab8343b531a9403df0ffd33fafter shiftrows:f7279b548343b5ab403d31a93ff0ffd3after mixcolumns:144627341516462ab51556d8bfecd743after keyexpand:rotword>:00 93 fd ca subword>:63 dc 54 74after Rcon>:23 dc 54 74 w28 : 4e54f70ew29 : 5f5fc9f3 w30 : 84a64fb2w31 : 4ea6dc4f密钥扩展 Round key:4e5f844e545fa6a6f7c94fdc0ef3b24faddroundkey 8 :5a19a37a4149e08c42dc1904b11f650c第 9 轮加密 : after subbyte:bed40ada833be1642c86c8d4c0f24dfe欢迎下载精品学习资源after shiftrows:bed40ada3be16483d4f22c86fec8c04dafter mixcolumns:00b154fa512fc889766d1b99d1ffcdeaafter keyexpand:欢迎下载

    注意事项

    本文(2022年密码学课程方案AES加密解密文档.docx)为本站会员(C****o)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开