




已阅读5页,还剩9页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
结合编程实例说明计算机加密的原理和方法班级: 学号: 姓名: 报告日期:2013年11月27日一、 基础知识介绍无论是网络传输中使用的安全传输协议,还是安全手段或安全措施,它们都需要使用加密算法和相应的解密算法。不了解与此相关的加密原理和算法,就很难深刻地认识各种安全传输协议,以及实现网络安全所采用的数字凭证、数字签名等技术。密码学是一门古老而深奥的学科,对一般人来说是非常陌生的。长期以来,只在很小的范围内使用,如军事、外交、情报等部门。计算机密码学是研究计算机信息加密、解密及其变换的科学,是数学和计算机的交叉学科,也是一门新兴的学科。随着计算机网络和计算机通讯技术的发展,计算机密码学得到前所未有的重视并迅速普及和发展起来。在国外,它已成为计算机安全主要的研究方向。密码学的历史比较悠久,在四千年前,古埃及人就开始使用密码来保密传递消息。两千多年前,罗马国王julius caesare(恺撒)就开始使用目前称为“恺撒密码”的密码系统。但是密码技术直到本20世纪40年代以后才有重大突破和发展。特别是20世纪70年代后期,由于计算机、电子通信的广泛使用,现代密码学得到了空前的发展。加密算法包括:对称加密算法、公开密钥算法和des对称加密算法。二、计算机加密基本原理和方法(1)对称加密算法基于密钥的算法通常有两类:对称算法和公开密钥算法(非对称算法)。对称算法有时又叫传统密码算法,加密密钥能够从解密密钥中推算出来,反过来也成立。在大多数对称算法中,加解密的密钥是相同的。对称算法要求发送者和接收者在安全通信之前,协商一个密钥。对称算法的安全性依赖于密钥,泄漏密钥就意味着任何人都能对消息进行加解密。对称算法的加密和解密表示为:ek(m)=cdk(c)=m(2)密钥加密算法公开密钥算法(非对称算法)的加密的密钥和解密的密钥不同,而且解密密钥不能根据加密密钥计算出来,或者至少在可以计算的时间内不能计算出来。之所以叫做公开密钥算法,是因为加密密钥能够公开,即陌生者能用加密密钥加密信息,但只有用相应的解密密钥才能解密信息。加密密钥叫做公开密钥(简称公钥),解密密钥叫做私人密钥(简称私钥)。公开密钥k1加密表示为:ek1(m)=c。公开密钥和私人密钥是不同的,用相应的私人密钥k2解密可表示为:dk2(c)=m。(3)凯撒密码算法原理在密码学中存在着各种各样的置换方式,但所有不同的置换方式都包含2个相同的元素。密钥和协议(算法)。凯撒密码的密钥是3,算法是将普通字母表中的字母用密钥对应的字母替换。置换加密的优点就在于它易于实施却难于破解. 发送方和接收方很容易事先商量好一个密钥,然后通过密钥从明文中生成密文,即是敌人若获取密文,通过密文直接猜测其代表的意义,在实践中是不可能的。凯撒密码的加密算法极其简单。其加密过程如下: 在这里,我们做此约定:明文记为m,密文记为c,加密变换记为e(k1,m)(其中k1为密钥),解密变换记为d(k2,m)(k2为解密密钥)(在这里k1=k2,不妨记为k)。凯撒密码的加密过程可记为如下一个变换: cm+k mod n (其中n为基本字符个数) 同样,解密过程可表示为: mc+k mod n (其中n为基本字符个数) 对于计算机而言,n可取256或128,m、k、c均为一个8bit的二进制数。显然,这种加密算法极不安全,即使采用穷举法,最多也只要255次即可破译。当然,究其本身而言,仍然是一个单表置换,因此,频率分析法对其仍是有效的。方法:恺撒密码的替换方法是通过排列明文和密文字母表,密文字母表示通过将明文字母表向左或向右移动一个固定数目的位置。例如,当偏移量是左移3的时候(解密时的密钥就是3):明文字母表:abcdefghijklmnopqrstuvwxyz密文字母表:defghijklmnopqrstuvwxyzabc使用时,加密者查找明文字母表中需要加密的消息中的每一个字母所在位置,并且写下密文字母表中对应的字母。需要解密的人则根据事先已知的密钥反过来操作,得到原来的明文。例如:明文:the quick brown fox jumps over the lazy dog密文:wkh txlfn eurzq ira mxpsv ryhu wkh odcb grj恺撒密码的加密、解密方法还能够通过同余数的数学方法进行计算。首先将字母用数字代替,a=0,b=1,.,z=25。此时偏移量为n的加密方法即为:e (x)= (x+n) mod 2 解密就是: d (x)= (x-n) mod 2三、 环境介绍编程语言c语言/java编译环境microsoft visual studio 20008/eclipse操作系统windows ,四、 实例说明算机加密的原理和方法实例1:利用对称加密算法对“1234567”进行加密,并进行解密程序源代码:#include /des加密算法c语言实现class subkey /定义子密钥为一个类 public: int key86; subkey16; /定义子密钥对象数组 class des int encipher_decipher; /判断加密还是解密 int key_in88; /用户原始输入的64位二进制数 int key_out87; /除去每行的最后一位校验位 int c0_d087; /存储经pc-1转换后的56位数据 int c047,d047; /分别存储c0,d0 int text88; /64位明文 int text_ip88; /经ip转换过后的明文 int a48,b48; /a,b分别存储经ip转换过后明文的两部分,便于交换 int temp86; /存储经扩展置换后的48位二进制值 int temp186; /存储和子密钥异或后的结果 int s_result84; /存储经s变换后的32位值 int text_p84; /经p置换后的32位结果 int secret_ip88; /经逆ip转换后的密文 public: void key_putting(); void pc_1(); int function(int,int); /异或 void subkey_production(); void ip_convert(); void f(); void _ip_convert(); void out_secret(); ; void des:key_putting() /得到密钥中对算法有用的56位 cout请输入64位的密钥(8行8列且每行都得有奇数个1):n; for(int i=0;i8;i+) for(int j=0;jkey_inij; if(j!=7) key_outij=key_inij; 运行结果分析试对“1234567”进行加密,再将其解密:输入“1234567”:回车后,输出加密后的密文:pqrstuv输入“1234567”的密文“pqrstuv”: 回车后出现解密后的明文“1234567”: 实例2:利用公开加密算法对“1234567”进行加密,并进行解密 实验源代码:package test; import java.io.fileinputstream; import java.io.fileoutputstream; import java.io.inputstream; import java.io.outputstream; import java.security.key; import java.security.securerandom; import javax.crypto.cipher; import javax.crypto.cipherinputstream; import javax.crypto.cipheroutputstream; import javax.crypto.keygenerator; import sun.misc.base64decoder; import sun.misc.base64encoder; public class desutil key key ; public desutil() public desutil(string str) setkey(str); / 生成密匙 public key getkey() return key ; public void setkey(key key) this . key = key; /* * 根据参数生成 key */ public void setkey(string strkey) try keygenerator _generator = keygenerator.getinstance ( des ); _generator.init( new securerandom(strkey.getbytes(); this . key = _generator.generatekey(); _generator = null ; catch (exception e) throw new runtimeexception( error initializing sqlmap class. cause: + e); /* * 加密 string 明文输入 ,string 密文输出 */ public string encryptstr(string strming) byte bytemi = null ; byte byteming = null ; string strmi = ; base64encoder base64en = new base64encoder(); try byteming = strming.getbytes( utf8 ); bytemi = this .encryptbyte(byteming); strmi = base64en.encode(bytemi); catch (exception e) throw new runtimeexception( error initializing sqlmap class. cause: + e); finally base64en = null ; byteming = null ; bytemi = null ; return strmi; /* * 解密 以 string 密文输入 ,string 明文输出 * * param strmi * return */ public string decryptstr(string strmi) base64decoder base64de = new base64decoder(); byte byteming = null ; byte bytemi = null ; string strming = ; try bytemi = base64de.decodebuffer(strmi); byteming = this .decryptbyte(bytemi); strming = new string(byteming, utf8 ); catch (exception e) throw new runtimeexception( error initializing sqlmap class. cause: + e); finally base64de = null ; byteming = null ; bytemi = null ; return strming; /* * 加密以 byte 明文输入 ,byte 密文输出 * * param bytes * return */ private byte encryptbyte( byte bytes) byte bytefina = null ; cipher cipher; try cipher = cipher.getinstance ( des ); cipher.init(cipher. encrypt_mode , key ); bytefina = cipher.dofinal(bytes); catch (exception e) throw new runtimeexception( error initializing sqlmap class. cause: + e); finally cipher = null ; return bytefina; /* * 解密以 byte 密文输入 , 以 byte 明文输出 * * param byted * return */ private byte decryptbyte( byte byted) cipher cipher; byte bytefina = null ; try cipher = cipher.getinstance ( des ); cipher.init(cipher. decrypt_mode , key ); bytefina = cipher.dofinal(byted); catch (exception e) throw new runtimeexception( error initializing sqlmap class. cause: + e); finally cipher = null ; return bytefina; /* * 文件 file 进行加密并保存目标文件 destfile 中 * * param file * 要加密的文件 如 c:/test/srcfile.txt * param destfile * 加密后存放的文件名 如 c:/ 加密后文件 .txt */ public void encryptfile(string file, string destfile) throws exception cipher cipher = cipher.getinstance ( des ); / cipher.init(cipher.encrypt_mode, getkey(); cipher.init(cipher. encrypt_mode , this . key ); inputstream is = new fileinputstream(file); outputstream out = new fileoutputstream(destfile); cipherinputstream cis = new cipherinputstream(is, cipher); byte buffer = new byte 1024; int r; while (r = cis.read(buffer) 0) out.write(buffer, 0, r); cis.close(); is.close(); out.close(); /* * 文件采用 des 算法解密文件 * * param file * 已加密的文件 如 c:/ 加密后文件 .txt * * param destfile * 解密后存放的文件名 如 c:/ test/ 解密后文件 .txt */ public void decryptfile(string file, string dest) throws exception cipher cipher = cipher.getinstance ( des ); cipher.init(cipher. decrypt_mode , this . key ); inputstream is = new fileinputstream(file); outputstream out = new fileoutputstream(dest); cipheroutputstream cos = new cipheroutputstream(out, cipher); byte buffer = new byte 1024; int r; while (r = is.read(buffer) = 0) cos.write(buffer, 0, r); cos.close(); out.close(); is.close(); public static void main(string args) throws exception desutil des = new desutil( 1234567 ); / des 加密文件 / des.encryptfile(g:/test.doc, g:/ 加密 test.doc); / des 解密文件 / des.decryptfile(g:/ 加密 test.doc, g:/ 解密 test.doc); string str1 = 要加密的字符串 test ; / des 加密字符串 string str2 = des.encryptstr(str1); / des 解密字符串 string destr = des.decryptstr(str2); system. out .println( 加密前: + str1); system. out .println( 加密后: + str2); system. out .println( 解密后: + destr); 运行结果分析试对公开密钥“1234567”进行加密,再将其解密:输入公开密钥“1234567”:回车后,输出加密后的密文:pqrstuv输入公开密钥“1234567”的密文“pqrstuv”: 回车后出现解密后的明文“1234567”: 实例3:利用公开加密算法对“1234567”进行加密,并进行解密源程序代码#includevoid main() char p1000; char c1000; int key,i,m; key=5; /*定义一个移位个数为5,即加密向右移5位,解密则相反*/ printf(please input the plaintext: n); gets(p); /*读取字符
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 竞业限制合同书模板5篇
- 2025贵州优建建筑劳务有限公司考前自测高频考点模拟试题有答案详解
- 2025广西科技大学招聘附属医院(临床医学院)领导干部3人模拟试卷附答案详解(突破训练)
- 2025江苏盐城市东台市卫生健康委员会招聘事业单位工作人员130人考前自测高频考点模拟试题参考答案详解
- 张耒的夏日课件
- 2025北京大兴区第四批公益性岗位招聘13人考前自测高频考点模拟试题及一套参考答案详解
- 2025年福建省莆田市忠门半岛实业有限公司招聘1人考前自测高频考点模拟试题附答案详解(突破训练)
- 中考化学重点题型专项训练
- 纤维复合材料力学性能测试系统-洞察及研究
- 2025湖南湘西州泸溪县妇幼保健计划生育服务中心招聘高校见习生5人考前自测高频考点模拟试题及完整答案详解1套
- 2025广西公需科目真题续集(附答案)
- T/CECS 10214-2022钢面镁质复合风管
- 学校“1530”安全教育记录表(2024年秋季全学期)
- 公路工程标准施工招标文件(2018年版)
- DL∕T 5776-2018 水平定向钻敷设电力管线技术规定
- (正式版)SH∕T 3548-2024 石油化工涂料防腐蚀工程施工及验收规范
- 道路、桥梁、隧道、地铁施工标准化手册(专业篇)
- 第十四章 环合反应天津大学
- 有机化学汪小兰 知识点总结 315化学
- 水土保持工程概(估)算编制规定(水利部水总[2003]67号)
- 串谐说明书概要
评论
0/150
提交评论