




已阅读5页,还剩1页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
重庆三峡学院计算机科学与工程学院实验报告填写样例开出学期:2015-2016学年 第 一 学期实验时间:7周星期二,1-2节专业:信息安全实验性质:设计姓名:Alice Peter.W年级班:15级1班实验学时:2实验课程:密码学与信息安全学号:201501096199实验成绩:实验项目名称:AES高级数据加密标准批阅:教师签名: 1、 实验目的1. 通过这项实验使学生深入理解对称加密的基本原理;2. 了解各种经典的对称加密算法,实现最新的对称加密算法AES;3. 掌握4. 会2、 实验环境(硬件、软件平台及工具等)操作系统环境:Windows7/2000/NT/XP;办公软件环境:Word、Excel;编程环境:java,Blue J,Visual c+;Turbo C。3、 实验内容及步骤(实验原理、内容、步骤、流程图、操作步骤等)1、实验任务任务性质:设计性实验。任务描述:首先要完全理解AES算法的实现过程,然后用C或C+编写AES加解密程序。编写中应注意其执行效率。2、概述:AES 是一个新的可以用于保护电子数据的加密算法。明确地说,AES 是一个迭代的、对称密钥分组的密码,它可以使用128、192 和 256 位密钥,并且用 128 位(16字节)分组加密和解密数据。与公共密钥密码使用密钥对不同,对称密钥密码使用相同的密钥加密和解密数据。通过分组密码返回的加密数据 的位数与输入数据相同。迭代加密使用一个循环结构,在该循环中重复置换(permutations )和替换(substitutions)输入数据。下图显示了 AES密钥对一个数据块进行加密和解密的情形。 3.AES算法的框架描述Rijndael算法是一个可变数据块长和可变密钥长的分组迭代加密算法,数据块长和密钥长可分别为128,192或256比特,但为了满足AES的要求,分组长度为128比特,密钥长度为128,192或256比特。AES密码算法采用的是代替一置换网络(SPN)结构,每一轮操作由4层组成:第1层(字节替换)为非线性层,用S盒对每一轮中的单个字节分别进行替换;第2层(行移位)和第3层(列混合)是线性混合层,对当前的状态阵按行移位,按列混合;第4层(密钥加层)用子密钥与当前状态阵进行字节上的异或。具体算法结构如图所示:4、 试验中出现的问题及解决方法(实验中出现的问题与解决办法、实验结果、实验数据与曲线图表等)程序运行开始界面:在选择“0”方式后输入“这是个简单的AES加密和解密算法的实现,采用16位密钥”后运行的结果如下图所示:5、 实验结果总结(实验结果分析、心得体会以及改进意见等)通过这次课程设计,才发现我们的能力非常有限,算法的实现是一个很大的考验,需要的不仅仅是比较全面的编程知识,还要较强的思维能力和足够的耐心。而我们在这些方面的能力是远远不够的,所以我们以后要努力加强这些方面的锻炼,多把书上理论的东西应用到实际中来,提高自己的实践能力。其实我们在实践的同时也是在学东西,在这个维持一个星期的课程设计中,我们一边学习一边探索,也学到了很多东西,其中感触良多,或者一个功能的实现都会让我们惊喜万分,因为这些东西是实实在在地用到实际中来了,这是在书本上感受不到的那种成就感!这次实验历时一个星期,通过这个星期的学习,发现了我们的很多不足,我们知识的很多漏洞,看到了自己的实践经验还是比较缺乏,理论联系实际的能力还急需提高。通过对信息安全这门课的学习和实验课的实践,我了解了对称加密算法(如 DES,AES,3DES等)和非对称加密算法(如RSA)的基本原理,特别是对AES的实验,我掌握了它加密和解密的实现,进一步理解了它的功能和一些要改进的地方。巩固了我信息安全这门课的知识,使理论和实验联系起来,让我印象深刻。6、 附录(实验源代码等另附纸张,教师没要求是可不要附录)2015年 10 月 31 日附录:总体的实现方法和代码如下:/package mon;import java.io.*;import javax.crypto.Cipher;import javax.crypto.spec.IvParameterSpec;import javax.crypto.spec.SecretKeySpec;import sun.misc.BASE64Decoder;import sun.misc.BASE64Encoder;* AES加解密算法* author jimpublic class AES / 加密 public static String Encrypt(String sSrc, String sKey) throws Exception if (sKey = null) System.out.print(Key为空null); return null; / 判断Key是否为16位 if (sKey.length() != 16) System.out.print(Key长度不是16位); return null; byte raw = sKey.getBytes(); SecretKeySpec skeySpec = new SecretKeySpec(raw, AES); Cipher cipher = Cipher.getInstance(AES/CBC/PKCS5Padding); /简易的矩阵加密编码法ciphe IvParameterSpec iv = new IvParameterSpec(0102030405060708.getBytes(); cipher.init(Cipher.ENCRYPT_MODE, skeySpec, iv); byte encrypted = cipher.doFinal(sSrc.getBytes(); return byte2hex(encrypted).toLowerCase(); / 解密 public static String Decrypt(String sSrc, String sKey) throws Exception try / 判断Key是否正确 if (sKey = null) System.out.print(Key为空null); return null; / 判断Key是否为16位 if (sKey.length() != 16) System.out.print(Key长度不是16位); return null; byte raw = sKey.getBytes(ASCII); SecretKeySpec skeySpec = new SecretKeySpec(raw, AES); Cipher cipher = Cipher.getInstance(AES/CBC/PKCS5Padding); IvParameterSpec iv = new IvParameterSpec(0102030405060708.getBytes(); cipher.init(Cipher.DECRYPT_MODE, skeySpec, iv); byte encrypted1 = hex2byte(sSrc); try byte original = cipher.doFinal(encrypted1); String originalString = new String(original); return originalString; catch (Exception e) System.out.println(e.toString(); return null; catch (Exception ex) System.out.println(ex.toString(); return null; public static byte hex2byte(String strhex) if (strhex = null) return null; int l = strhex.length(); if (l % 2 = 1) return null; byte b = new bytel / 2; for (int i = 0; i != l / 2; i+) bi = (byte) Integer.parseInt(strhex.substring(i * 2, i * 2 + 2),16); return b; public static String byte2hex(byte b) String hs = ; String stmp = ; for (int n = 0; n b.length; n+) stmp = (java.lang.Integer.toHexString(bn & 0XFF); if (stmp.length() = 1) hs = hs + 0 + stmp; else hs = hs + stmp; return hs.toUpperCase(); public static void main(String args) throws Exception 加密用的Key 可以用26个字母和数字组成,最好不要用保留字符,虽然不会错,至于怎么裁决,个人看情况而定 String cKey = 1111222233334444; System.out.println(请选择操作方法:); System.out.println(*: 0-自行输入字符串!-); System.out.println(*: 1-加密的文件名为a.txt!-); System.out.println(*: 2-退出系统-); char ch=(char)System.in.read(); if(ch=0) char c=(char)System.in.read(); System.out.print(请输入要加密的明文:); BufferedReader in=new BufferedReader(new InputStreamReader(System.in); String cSrc=in.readLine(); String enString = AES.Encrypt(cSrc, cKey); System.out.println(加密后的密文: + enString); String DeString = AES.Decrypt(enString, cKey); System.out.println(解密后的明文是: + DeString+nn); else if(ch=1) FileReader in=new FileReader(a.txt);/建立文件输入流 BufferedReader bin=new BufferedReader(in);/建立缓冲输入流 FileWriter EncryptOut=new FileWriter( Encrypt.txt,true);/建立文件输出流 FileWriter DecryptOut=new FileWriter( Decryt.txt,true);/建立文件输出流 String cSrc; while (cSrc=bin.readLine()!=null) /将缓冲区内容通过循环方式逐行赋值给字符串cSrc System.out.println(原字符串是 : + cSrc); String enString = AES.Encrypt(cSrc, cKey); System.out.println(加密后的密文: + enString);/ /在屏幕上显示字符串cSrc EncryptOut.write(enString+n); /将字符串enString 通过输出流写入Encrypt.txt 中 String DeString = AES.Decrypt(enString, cKey); System.out.println(解密后的明文是: + DeString+nn); DecryptOut.write(DeString+n); in.close(); Enc
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年低碳经济发展考试试题及答案动态分析
- 校园运动会的一天记事文章(5篇)
- 难忘的班级集体活动事件作文11篇
- 高中英语语法复习课教案:时态辨析与实践运用
- 2025年泡腾剂项目立项申请报告模板
- 我们一起游泳难忘的夏日时光作文(12篇)
- 2025年成人高考《语文》古诗词文学性与艺术性试题库
- 2025年春季小学五年级数学期末冲刺卷:数学思维拓展与训练
- 2025年电子商务师(中级)职业技能鉴定试卷:电商短视频电商数据分析
- 2025年专升本艺术概论考试模拟卷(艺术审美心理与艺术史研究前沿课题)
- 2024吉林省国资委出资企业招聘笔试参考题库含答案解析
- 2024山西航空产业集团有限公司招聘笔试参考题库附带答案详解
- JJG 164-2000液体流量标准装置
- 光伏运维技能大赛考试题库及答案
- 大学生实习实践的职业素养与职业道德1
- JBT 14346-2023 建筑施工机械与设备 泥水平衡顶管机 (正式版)
- XXXX造价管理精讲讲义第五章工程项目投融资
- 李辛演讲-现代人的压力与管理
- 2024届辽宁省沈阳市沈河区物理八下期末考试试题含解析
- 激光先进制造技术 课件 第3章 激光熔覆技术
- 医院与商会合作协议
评论
0/150
提交评论