欢迎来到冰点文库! | 帮助中心 分享价值,成长自我!
冰点文库
全部分类
  • 临时分类>
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • ImageVerifierCode 换一换
    首页 冰点文库 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    AES加解密实验报告.docx

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

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

    AES加解密实验报告.docx

    1、AES加解密实验报告信息安全体系课程设计报告班 级: 物联网 2013 级 1 班 姓 名: 学 号: 课程设计题目: AES加密算法 所 属 课 程 : 物联网信息安全 实验室(中心): 软件实验室60801 指 导 教 师 : 完 成 时 间 : 2016 年 6 月 6 日1.问题分析和任务定义问题分析:AES是一个对称分组密码算法,根据使用的密码长度,AES最常见的有3种方案,用以适应不同的场景要求,分别是AES-128、AES-192和AES-256。AES加密过程涉及到4种操作:字节替代(SubBytes)、行移位(ShiftRows)、列混淆(MixColumns)和轮密钥加(A

    2、ddRoundKey)。解密过程分别为对应的逆操作。由于每一步操作都是可逆的,按照相反的顺序进行解密即可恢复明文。AES 算法是基于置换和代替的。置换是数据的重新排列,而代替是用一个单元数据替换另一个。AES 使用了几种不同的技术来实现置换和替换。 任务(功能)定义:(数据结构部分)(1)明文转换:Utf8.encode(strUni); /将得到的明文或密钥通过Utf8编码Utf8.decode(strUtf); /将UTF-8编码的字符串解码成多字节Unicode字符Base64.encode = function(str, utf8encode) /将UTF-8编码得到的字符通过Base

    3、64编码Base64.decode = function(str, utf8decode) /将UTF-8解码得到的字符通过Base64解码(2)轮密钥加:Aes.addRoundKey = function(state, w, rnd, Nb) / 将128位的state矩阵按位与128位密钥异或(3)字节代替:Aes.subBytes = function(s, Nb) /将状态矩阵的每个字节,进行4*Nb矩阵的遍历并替换(4)列混淆:Aes.mixColumns = function(s, Nb) /将状态矩阵逐列混合(5)行位移:Aes.shiftRows = function(s,

    4、Nb) /状态矩阵的第0行不变,第1行向左移一个字节,第2行向左移两个字节,第三行向左移三个字节(6)密钥扩展:Aes.keyExpansion = function(key) /将输入的密钥扩展为11组128位密钥组,其中第0组为输入密钥本身2.环境简介开发环境:WebStrom 11.0.2环境简介:WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。3

    5、.程序设计根据算法密钥的长度,AES有3种不同方案用以满足不同的场景需求,分别是AES-128、AES-192和AES-256。本次内容主要对AES-128进行设计,另外两种的思路基本一样,只是密钥扩展的过程会稍有不同,加解密的轮数会适当增加,但加解密的操作都是一样的。(1)AES加解密流程(2)字节替代字节代替的主要功能是通过S盒完成一个字节到另外一个字节的映射。主要算法:Aes.subBytes = function(s, Nb) for (var r=0; r4; r+) for (var c=0; cNb; c+) src = Aes.sBoxsrc; return s;(3)行位移第

    6、一行保存不变,第二行循环左移1个字节,第三行循环左移2个字节,第四行循环左移3个字节。主要算法:Aes.shiftRows = function(s, Nb) var t = new Array(4); for (var r=1; r4; r+) for (var c=0; c4; c+) tc = sr(c+r)%Nb; for (var c=0; c4; c+) src = tc; return s;(4)列混淆根据矩阵的乘法可知,在列混淆的过程中,每个字节对应的值只与该列的4个值有关系。此处的乘法和加法都是定义在GF(28)上的,需要注意如下几点:1)将某个字节所对应的值乘以2,其结果就

    7、是将该值的二进制位左移一位,如果该值的最高位为1(表示该数值不小于128),则还需要将移位后的结果异或00011011;2)乘法对加法满足分配率3)此处的矩阵乘法与一般意义上矩阵的乘法有所不同,各个值在相加时使用的是模2加法(相当于是异或运算)。主要算法:Aes.mixColumns = function(s, Nb) for (var c=0; cNb; c+) var a = new Array(4); var b = new Array(4); for (var i=0; i4; i+) ai = sic; bi = sic&0x80 ? sic1 0x011b : sic1; s0c

    8、= b0 a1 b1 a2 a3; s1c = a0 b1 a2 b2 a3; s2c = a0 a1 b2 a3 b3; s3c = a0 b0 a1 a2 b3; return s;(5)轮密钥加任何数和自身的异或结果为0。加密过程中,每轮的输入与轮密钥异或一次;因此,解密时再异或上该轮的密钥即可恢复输入。主要算法:Aes.addRoundKey = function(state, w, rnd, Nb) for (var r=0; r4; r+) for (var c=0; cNb; c+) staterc = wrnd*4+cr; return state;(6)密钥扩展密钥扩展过程说

    9、明:1) 将初始密钥以列为主,转化为4个32 bits的字,分别记为w03;2) 按照如下方式,依次求解wj,其中j是整数并且属于4,43;3) 若j%4=0,则wj=wj-4g(wj-1),否则wj=wj-4wj-1;函数g的流程说明:4) 将w循环左移一个字节;5) 分别对每个字节按S盒进行映射;6) 与32 bits的常量(RCj/4,0,0,0)进行异或,RC是一个一维数组,其值如下。(RC的值只需要有10个,而此处用了11个,实际上RC0在运算中没有用到,增加RC0是为了便于程序中用数组表示。由于j的最小取值是4,j/4的最小取值则是1,因此不会产生错误。)RC = 00, 01,

    10、02, 04, 08, 10, 20, 40, 80, 1B, 36主要算法:Aes.keyExpansion = function(key) var Nb = 4; /明文列数var Nk = key.length/4; /密钥列数 128位,NK=4; var Nr = Nk + 6; /轮数 var w = new Array(Nb*(Nr+1); var temp = new Array(4); for (var i=0; iNk; i+) var r = key4*i, key4*i+1, key4*i+2, key4*i+3; wi = r; for (var i=Nk; i(Nb

    11、*(Nr+1); i+) wi = new Array(4); for (var t=0; t4; t+) tempt = wi-1t; if (i % Nk = 0) temp = Aes.subWord(Aes.rotWord(temp); for (var t=0; t 6 & i%Nk = 4) temp = Aes.subWord(temp); for (var t=0; t4; t+) wit = wi-Nkt tempt; return w;4.用户使用说明先输入明文和密钥,点击“加密”按钮进行加密,点击“解密”按钮进行解密,利用清空按钮清空当前表单。5.测试数据与测试结果分析A

    12、ES_128加解密测试:1)明文处输入:算法测试;密钥处输入: 123456;点击加密按钮2)点击解密按钮分析:通过加密按钮可以得到每一轮加密后的16进制结果,最终在加密对应的框里将最后一轮的加密结果通过Base64编码成字符串格式显示出来。通过解密按钮,将加密出来的结果(字符串)通过Base64解码,通过解密算法得到最后的解密结果。 从加解密过程这一栏可以看出,第1轮加密结果与第10轮解密结果一致,第2轮加密结果与第9轮解密结果一致 。这是由于AES是对称加密,相同的明文和密钥,加解密的结果应该一致。3)重复步骤 1)在这个例子中,由于明文分组长度和密钥长度均为128位,而输入的明文只有8个

    13、字节,不足16字节的明文将随机填充,密钥只有6个字节,不足16字节的密钥将用0填充; 因此,同样的明文和密钥,再次进行加密的时候,将会得到不同的结果。6.总结这次课程设计我是利用JavaScript语言来实现的,但不管什么语言,密码学本身的精华不会改变。通过这次课程设计,AES加密算法的步骤和原理已经熟悉和掌握了,虽然只实现了128bit的AES加解密,但在整个过程中仍然遇到了很多困难,比如,用的是二维数组,遇到有时输入是先行后列,但是按照数组的定义是先列后行,很多时候有点绕。另外,矩阵乘法那里的异或函数,由于是十六进制的算法,需要用到二进制乘法的知识。还有就是对输入文本的处理,有汉字,有字符,有数字,刚开始对它们的处理还不知从哪里下手,后来查阅资料才知道用UTF-8和Base64的规则来处理。在界面设计时,通过HTML+CSS设计出了一个有良好交互的简单网页。总之,在这次课程设计过程中学到了很多自己欠缺的东西,也从中加强了自己处理问题的能力。


    注意事项

    本文(AES加解密实验报告.docx)为本站会员主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(点击联系客服),我们立即给予删除!

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




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2023 冰点文库 网站版权所有

    经营许可证编号:鄂ICP备19020893号-2


    收起
    展开