华中农业大学信息管理与信息系统【信息安全与保密】实验报告
信息安全与保密试验报告
1.实验目的
本次实验使用Xcode作为开发工具,swift作为主要开发语言,简单编写应用页面,对信息安全与解密课程中的加密与解密进行具体直观地呈现,将理论和实践结合起来巩固强化知识的吸收与运用。算法实现部分主要使用AES算法进行加密和解密,使用MD5摘要算法进行加密。
2.实验过程
2.1 搭建页面
主要页面元素如下:
class ViewController: UIViewController,UITextFieldDelegate {var flag = falsevar label1:UILabel!var label2:UILabel!var output1:String! = ""var output2:String! = ""var result:UILabel!override func viewDidLoad() {super.viewDidLoad()let screen = UIScreen.main.boundsself.view.backgroundColor = .systemYellow//添加标签let labelHeight:CGFloat = 100let labelWidth:CGFloat = 100let labelTopView:CGFloat = 100self.label1 = UILabel(frame: CGRect(x:(screen.size.width - labelWidth)/2 , y: labelTopView, width: labelWidth, height: labelHeight))self.label1.text = "明文:"self.label1.font = .boldSystemFont(ofSize: 22)self.label1.textColor = .systemBlueself.label1.textAlignment = .centerself.view.addSubview(self.label1)//添加textFieldlet textFieldHeight:CGFloat = 50let textFieldWidth:CGFloat = 300let textFieldTopView:CGFloat = 200let textField = UITextField(frame: CGRect(x: (screen.size.width - textFieldWidth)/2, y: textFieldTopView, width: textFieldWidth, height: textFieldHeight))textField.placeholder = "请输入相关信息"textField.borderStyle = .roundedRecttextField.clearButtonMode = .whileEditingtextField.becomeFirstResponder()textField.returnKeyType = .donetextField.textColor = .systemBluetextField.allowsEditingTextAttributes = .random()textField.delegate = selfself.view.addSubview(textField)//添加按钮let button = UIButton(type: .custom)let buttonHeight:CGFloat = 60let buttonWidth:CGFloat = 100let buttonTopView:CGFloat = 650let frame = CGRect(x: (screen.size.width - buttonWidth)/2, y: buttonTopView, width: buttonWidth, height: buttonHeight)button.frame = framebutton.backgroundColor = .redbutton.layer.cornerRadius = 6button.layer.borderColor = UIColor.red.cgColorbutton.layer.borderWidth = 1button.setTitle("加密", for: UIControl.State())button.titleLabel?.font = .boldSystemFont(ofSize: 17)button.addTarget(self, action: #selector(modeChanged(_:)), for: .touchUpInside)self.view.addSubview(button)//添加结果标注:self.label2 = UILabel(frame: CGRect(x: (screen.size.width - labelWidth)/2, y: 270, width: labelWidth, height: labelHeight))self.label2.text = "密文:"self.label2.font = .boldSystemFont(ofSize: 22)self.label2.textAlignment = .centerself.label2.textColor = .systemBlueself.view.addSubview(self.label2)//添加结果标签let resultHeight:CGFloat = 100let resultWidth:CGFloat = 300let resultTopView:CGFloat = 370self.result = UILabel(frame: CGRect(x: (screen.size.width - resultWidth)/2, y: resultTopView, width: resultWidth, height: resultHeight))self.result.text = ""self.result.font = .boldSystemFont(ofSize: 22)self.result.textColor = .systemBlueself.result.textAlignment = .centerself.result.lineBreakMode = NSLineBreakMode.byWordWrappingself.result.numberOfLines = 0self.result.layer.cornerRadius = 5self.result.layer.masksToBounds = trueself.result.layer.borderWidth = 1self.result.layer.borderColor = .init(red: 1, green: 1, blue: 1, alpha: 1)self.result.layer.backgroundColor = .init(red: 1, green: 1, blue: 1, alpha: 1)self.view.addSubview(result)//添加切换按钮let toggleHeight:CGFloat = 40let togggleWidth:CGFloat = 50let toggleTopView:CGFloat = 550let toggleButton = UIButton(frame: CGRect(x: (screen.size.width - togggleWidth)/2, y: toggleTopView, width: togggleWidth, height: toggleHeight))toggleButton.backgroundColor = .graytoggleButton.layer.borderColor = UIColor.gray.cgColortoggleButton.layer.borderWidth = 1toggleButton.layer.cornerRadius = 6toggleButton.setTitle("切换", for: UIControl.State())toggleButton.titleLabel?.font = .boldSystemFont(ofSize: 13)toggleButton.addTarget(self, action: #selector(toggle(_:)), for: .touchUpInside)self.view.addSubview(toggleButton)
2.2 算法实现
2.2.1 MD5摘要算法加密的实现
1.在Teminal终端使用命令行创建一个Podfile
$ touch Podfile
$ open -e Podfile
2.在刚刚弹出的Podfile文件内添加以下一些内容
pod ‘CryptoSwift’
3.下载第三方库成功后,即可在Viewcontroller.swift文件首行引入
import CryptoSwift
因为Swift的第三方库CryptoSwift是Swift中实现的标准和安全加密算法的集合,所以md5摘要算法的实现可以直接调用此库内的md5()方法即可
算法嵌入页面实现功能代码如下:
@objc func modeChanged(_ sender:AnyObject){ self.result.text = output1 }func textFieldShouldReturn(_ textField: UITextField) -> Bool {textField.resignFirstResponder()output1 = textField.text?.md5()//output2 = textField.text.return true
}
2.2.2 AES算法加密解密的实现
加密
func Encode_AES_ECB(strToEncode:String)->String {var encodeString = ""do {let aes = try AES(key: Padding.zeroPadding.add(to: key.bytes, blockSize: AES.blockSize), blockMode: ECB(),padding: .pkcs7)let encoded = try aes.encrypt(strToEncode.bytes)encodeString = encoded.toBase64()print(encodeString) }catch{print(error.localizedDescription)}return encodeString}
解密
func Decode_AES_ECB(strToDecode:String)->String {var decodeString = ""let data = NSData(base64Encoded: strToDecode, options: NSData.Base64DecodingOptions.init(rawValue: 0))var encrypted:[UInt8] = []let count = data?.lengthfor i in 0..<count!{var temp:UInt8 = 0data?.getBytes(&temp, range: NSRange(location: i, length: 1))encrypted.append(temp)}do {let aes = try AES(key: Padding.zeroPadding.add(to: key.bytes, blockSize: AES.blockSize), blockMode: ECB(), padding: .pkcs7)let decode = try aes.decrypt(encrypted)let encoded = Data(decode)decodeString = String(bytes: encoded.bytes, encoding: .utf8)!}catch{print(error.localizedDescription)}return decodeString}
算法嵌入功能页面实现功能代码如下:
@objc func modeChanged(_ sender:AnyObject){if self.label1.text == "明文:" {result.text = Encode_AES_ECB(strToEncode: output1)}else if self.label1.text == "密文:" {result.text = Decode_AES_ECB(strToDecode: output1)}}func textFieldShouldReturn(_ textField: UITextField) -> Bool {textField.resignFirstResponder()output1 = textField.textreturn true}@objc func toggle(_ sender:AnyObject){if flag {self.label1.text = "密文:"self.label2.text = "明文:"self.button.setTitle("解密", for: UIControl.State())self.result.text = ""flag = false}else{self.label1.text = "明文:"self.label2.text = "密文:"self.button.setTitle("加密", for: UIControl.State())self.result.text = ""flag = true}}
2.3 成果展示
- 页面展示:
- md5摘要算法:
- AES算法:
加密:
切换:
解密:
实验心得
通过这次实验,我的收获如下:
- 将“信息安全与保密”这门课理论和实践结合地更加紧密了。纸上得来终觉浅,只在教室里听老师讲抽象的理论知识让我对这门课程了解的还不算透彻,实验让老师的一页页PPT变成一行行可以实现并且可操作的代码,增强了学习的成就感,在做实验的时候,脑海中一遍回想着老师上课讲到的相关知识,对应课程的掌握和理解更加深入了!
- 增强了个人技能水平的提升。自学了将近半年的移动端iOS开发,却从未将这些课堂之外的新鲜知识注入到自己亲身经历的课堂中。这次的实验给了我很好的契机,不仅仅单纯对算法的实现,页面的构建,元素的组成,各个元素各个事件之间的处理逻辑也让我苦思冥想,绞尽脑汁。最终功夫不负有心人,整个应用顺利地运行了起来!
- 学习能力的大大提升。由于使用了iOS中的swift语言进行实验,所以网上的资料大多不能直接拿来就用,这样一来,就迫使自己仔细学习CryptoSwift库的源码以及对网络上旧版Xcode版本加密算法进行总结归纳,最后形成适用于Xcode11,以及iOS10以上模拟器上的加密解密算法及其功能实现。
- 最后,感谢章老师以及同学们的鼓励和耐心的帮助!
华中农业大学信息管理与信息系统【信息安全与保密】实验报告相关推荐
- 华中农业大学第五届程序设计大赛网络同步赛解题报告2(转)
今天实在累了,还有的题晚点补.... 题目链接:http://acm.hzau.edu.cn/problemset.php?page=3 题目:acm.hzau.edu.cn/5th.pdf A:Li ...
- 华中农业大学python实验题
知识汇总 博客 地址 内容 华中农业大学Python期末速成笔记 https://blog.csdn.net/m0_46521785/category_10626330.html 华中农业大学pyth ...
- 审计局计算机安全领导小组,南宁市审计局关于印发《岗位信息安全和保密责任制度》的通知...
局机关各科室.投资审计中心: 为进一步规范我局各工作岗位信息安全和保密工作,现将我局<岗位信息安全和保密责任制度>印发给你们,请遵照执行. 二○一一年十月二十七日 南宁市审计局岗位信息安全 ...
- 计算机专业事业单位类别,信息管理与信息系统专业在事业单位考试中属于什么专业类别...
满意答案 jshacs888 2020.02.07 采纳率:57% 等级:7 已帮助:712人 计算机大类,公共管理类,计算机软件类都可以. 计算机(大类)类 计算机及应用.计算机情报.计算机应 ...
- 信息管理与信息系统专业的来龙去脉——基于六所大学个案的分析(转)
信息管理与信息系统专业的来龙去脉--基于六所大学个案的分析(转) 信息管理与信息系 2011-04-02 摘 要 在论文的前两部分,作者对信息管理与信息系统专业学科归属作了梳理,并通过对中国六所大学的 ...
- 中软信息安全与保密解决方案
中软信息安全与保密解决方案 一.概述 防火墙.IDS.内外网隔离以及其它针对外部网络的访问控制系统,可有效防范来自网络外部的进攻,但对于企业内部的信息保密问题,却一直没有好的防范方法:内部人员可以轻松 ...
- 华中农业大学Kenichi Tsuda团队诚聘植物-微生物互作、生物信息学博士后二名
华中农业大学Kenichi Tsuda团队诚聘植物-微生物互作.生物信息学博士后二名 http://www.plantimmunity.cn/ 我们将招聘二名从事植物-微生物互作.生物信息学研究的博士 ...
- ISME Commun: 华中农业大学在菌群收敛机制方面取得新进展
ISME Commun: 华中农业大学在菌群收敛机制方面取得新进展 涌现性基因表达适应性促进合成菌群收敛演化 Emergent transcriptional adaption facilitates ...
- 华中农业大学苏汉东课题组诚聘博士后-
华中农业大学苏汉东课题组诚聘博士后 一.课题组长简介 苏汉东,华中农业大学教授,博士生导师.本科和博士分别毕业于华中农业大学(2012年)和中国科学院大学(2019年),随后于中科院遗传与发育生物学研 ...
最新文章
- SAP freelancer接SAP项目的几种方法
- Spark之数据倾斜 --采样分而治之解决方案
- ubuntu下 显示no module named “lib“或 “lib.xxx“
- php的常量和变量的区别,变量和常量的区别_在php当中常量和变量的区别
- 前端学习(2514):实战
- mat 内存分析 Linux,JVM内存分析工具MAT使用简介
- 威客php,phpapp威客系统下载
- 进行数据分析时,如何过滤报告数据?玩转永洪BI就够了
- 冰点还原容易出现的问题总结
- 共享打印机服务器脱机状态,网络/局域网共享打印机脱机故障处理方法
- AWS简介(Amazon Web Services )
- NOIP模拟赛20191024 T1 嘟嘟噜【约瑟夫问题的mlogn解法】
- Sklearn实现普通最小二乘法
- c语言 不用锁存器 数码管倒计时,倒计时器课程设计.doc
- 看完Alibaba“Java成长笔记”我懂了! 为什么阿里的程序员成长如此之快?
- 【N32G457 】基于RT-Thread和N32G457 数码管时钟
- Java面试笔试题大汇总(最全+详细答案)
- 介绍计算机的英语作文,总算晓得写一篇介绍电脑的英语作文
- HPM6750系列--第一篇 初识HPM6750
- 案例:计算最高分、最低分、平均分、方差、标准差。
热门文章
- 未能加载文件或程序集“System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”或它的某一个依
- 中医诊所一定要去尝试软文营销,效果简直不要太好
- 性能优化——性能之巅
- 【数据库】CTE(Common Table Expression(公共表表达式))
- 《Linux内核技术实战课》总结三:网络
- 百度飞桨论文复现训练营笔记1
- eclipse 护眼色设置
- Orchard基本概念
- python - 列表常用元素,列表管理
- 随机森林的“随机”在哪?