首页 移动充值卡密加密技术毕业论文

移动充值卡密加密技术毕业论文

举报
开通vip

移动充值卡密加密技术毕业论文移动充值卡密加密技术毕业论文 移动充值卡密加密技术 作者姓名:栾学文 专业班级:2008050103 指导老师:李勇 摘 要 随着信息社会的到来,人们在享受信息资源所带来的巨大的利益的同时,也 面临着信息安全的严峻考验。信息安全已经成为世界性的现实问题,信息安全问 题已威胁到国家的政治、经济、军事、文化、意识形态等领域,同时,信息安全 问题也是人们能否护自己的个人隐私的关键。信息安全是社会稳定安全的必要前 提条件。 本文通过对各种软件和算法的研究,最后采用VC++编写程序,实现了DES 加密算法,对移动充...

移动充值卡密加密技术毕业论文
移动充值卡密加密技术毕业论文 移动充值卡密加密技术 作者姓名:栾学文 专业班级:2008050103 指导老师:李勇 摘 要 随着信息社会的到来,人们在享受信息资源所带来的巨大的利益的同时,也 面临着信息安全的严峻考验。信息安全已经成为世界性的现实问题,信息安全问 题已威胁到国家的政治、经济、军事、文化、意识形态等领域,同时,信息安全 问题也是人们能否护自己的个人隐私的关键。信息安全是社会稳定安全的必要前 提条件。 本文通过对各种软件和算法的研究,最后采用VC++编写程序,实现了DES 加密算法,对移动充值卡密进行加密。将移动充值卡密以文件形式进行加密后, 其中信息不会被轻易盗用,保证了信息的安全性。 关键词:解密 加密 DES 移动充值卡密 信息安全 Mobile phone card dense encryption technology Abstract: With the advent of the information society, people in the enjoyment of information resources brought about tremendous benefits, but also faced with a letter Income security, a severe test. Information security has become a worldwide reality, information security has been a threat to the country's political .Governance, economic, military, cultural, ideological and other areas at the same time, the issue of information security is also a possibility of retaining their own personal Privacy key. Information security and social stability is a necessary precondition for security.? Based on various software and algorithm research, Useing VC++ implement DES encryption algorithm to encrypt mobile recharge card. Mobile recharge card in the form of a document is encrypted, the information will not be easily stolen, ensures the security of information Keywords: Decode, Encode, DES,Mobile recharge information,Information Security 目 录 第1章 前 言 1 第2章 需求分析 2 2.1 系统概述 2 2.1.1概述 2 2.2密码学的发展 2 2.3 文件加密解密中密码体制研究 6 2.3.1密码原理 6 2.3.2密码体制 7 第3章 分组加密解密算法-DES算法 10 3.1 DES算法简介 10 3.2 DES加密过程详解 10 第4章 DES算法的C++实现 19 4.1 DES加密中所使用的函数 19 4.2 DES实现文件加密函数及其代码 19 第5章 DES加密算法实例 21 5.1 实例程序 文件加密程序 21 结 论 23 致 谢 24 参考文献 25 附 录 26 第1章 前 言 信息安全是一个综合性的交叉学科领域,广泛涉及数学、密码学、计算机、通信、控制、人工智能、安全工程、人文科学等诸多学科,是近几年迅速发展的一个热点学科领域。信息对抗和网络安全是信息安全的核心热点,它的研究和发展又将刺激、推动和促进相关学科的研究与发展。至今,密码技术是取得信息安全性最有效的一种方法, 密码技术是信息安全的核心技术[1]。 通过数据加密,人们可以有效地保证通信线路上的内容不被泄露,而且还可以检验传送信息的完整性。进一步,密码技术可以应用于数字签名、身份认证和信息鉴定,这些应用对于资源存取控制以及其它安全措施是必须而且有效的。信息安全产品从应用类型上可以分为防火墙类产品、防病毒类产品、防攻击类产品、密码类产品、认证类产品和访问控制类产品。相对于防病毒软件和防火墙软件来说,基于密码技术密码类产品、认证类产品份额相对较小,但随着金融、电信、政府等行业信息化建设对于网络安全整体解决 方案 气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载 需求的增加,将会有较大的增长。 在本次毕业 设计 领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计 中,使用典型的加密算法-DES对移动充值卡密进行加密,从而达到防止别人盗用此卡密的目的。 第2 章 需求分析 2.1 系统概述 FireWall 、网络加密、加密狗等。但是,这些都是系统或网站层次的安全设施。对于广大用户来说,更为直接、也更为有效的 办法 鲁班奖评选办法下载鲁班奖评选办法下载鲁班奖评选办法下载企业年金办法下载企业年金办法下载 ,就是使用信息加密技术。加密技术是一门实用的技术,有着悠久的历史。过去,加密技术仅被军事和谋报人员以及某些大型商业企业所采用,应用范围十分有限。加密学也是一门与数学有关的深奥的科学,有能力研究加密学的人为数不多。恐怕这也是它鲜为人知、较少应用的原因。信息安全的内容主要包括五个部分:信息的保密性、信息的完整性、信息的可用性、信息的可控性、信息的不可否认性。密码技术是保证信息安全的核心。 2.2密码学的发展 密码学的发展历程大致经历了个阶段:古代加密方法、古典密码近代密码 1.古代加密方法(手工阶段) 源于应用的无穷需求总是推动技术发明和进步的直接动力。存于石刻或史书中的记载表明,许多古代文明,包括埃及人、希伯来人、亚述人都在实践中逐步发明了密码系统。从某种意义上说,战争是科学技术进步的催化剂。人类自从有了战争,就面临着通信安全的需求,密码技术源远流长。 古代加密方法大约起源于公元前440年出现在古希腊战争中的隐写术。当时为了安全传送军事情报,奴隶主剃光奴隶的头发,将情报写在奴隶的光头上,待头发长长后将奴隶送到另一个部落,再次剃光头发,原有的信息复现出来,从而实现这两个部落之间的秘密通信。 公元前400年,斯巴达人就发明了“塞塔式密码”,即把长条纸螺旋形地 斜绕在一个多棱棒上,将文字沿棒的水平方向从左到右书写,写一个字旋转一下,写完一行再另起一行从左到右写,直到写完。解下来后,纸条上的文字消息杂乱无章、无法理解,这就是密文,但将它绕在另一个同等尺寸的棒子上后,就能看到原始的消息。这是最早的密码技术。 我国古代也早有以藏头诗、藏尾诗、漏格诗及绘画等形式,将要表达的真正意思或“密语”隐藏在诗文或画卷中特定位置的记载,一般人只注意诗或画的表面意境,而不会去注意或很难发现隐藏其中的“话外之音”。 比如:我画蓝江水悠悠,爱晚亭枫叶愁。秋月溶溶照佛寺,香烟袅袅绕轻楼传输密文的发明地是古希腊,一个叫Aeneas Tacticus的希腊人在《论要塞的防护》一书中对此做了最早的论述。公元前2世纪,一个叫Polybius的希腊人设计了一种将字母编码成符号对的方法,他使用了一个称为Polybius的校验表,这个表中包含许多后来在加密系统中非常常见的成分,如代替与换位。Polybius校验表由一个5′5的网格组成(如表1-1所示),网格中包含26个英文字母,其中I和J在同一格中。每一个字母被转换成两个数字,第一个是字母所在的行数,第二个是字母所在的列数。如字母A就对应着11,字母B就对应着12,以此类推。使用这种密码可以将明文“message”置换为密文“32 15 43 43 11 22 15”。在古代,这种棋盘密码被广泛使用。古典密码的加密方法一般是文字置换,使用手工或机械变换的方式实现。古典密码系统已经初步体现出近代密码系统的雏形,它比古代加密方法复杂,其变化较小。古典密码的代表密码体制主要有:单表代替密码、多表代替密码及转轮密码。 Caesar密码及其改进方法 公元前60年 大约两千年前 ,古罗马统帅“朱利叶斯??凯撒” Caesar , 第一个用当时发明的“凯撒密码”书写军事文书,用于战时通信。后来他成了古罗马帝王,就是“凯撒” Caesar 大帝。 A.替换加密法 凯撒加密法是替换方法中的一个特例,消息中每一个字母换成向后三个字母的字母的。学习并演示此算法的加密与解密过程的。 1:A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 3个字母: 2:D E F G H I J K L M N O P Q R S T U V W X Y Z A B C 4个字母: 3:E F G H I J K L M N O P Q R S T U V W X Y Z A B C D 明文:SHE IS A STUDENT 密文:VKH LV D VWXGHQW 算法:Caesar凯撒加密法 密钥:Key 3 25个密钥 B.单码加密法 凯撒加密法的改进就是采用单码加密法,消息中每一个字母换成26个字母中的任何一个字母 除了本身不算之外 。比如:A B-Z B A,C-Z C A,B,D-Z。不过,还得满足这个单码是一个一一对应关系才行的。经过了这种单码加密之后,26个字母的任何转换与组合,就可以得到 26x25x24x23...x2 4x 10的26次方 种的可能性的。此算法的加密与解密的讲解的。C.栅栏加密技术一 明文:Come home tomorrow 算法:C m h m t m r o o e o e o o r w 密文:Cmhmtmrooeoeoorw 解密: C m h m t m r o o e o e o o r w 明文: Come home tomorrowD.栅栏加密技术二 将明文信息一行一行地写入预定长度的矩形中的。假设矩形为6列. 明文:Come home tomorrow 算法:第一列 第二列 第三列 第四列 第五列 第六列 C o m e h o m e t o m o r r o w 密文:cmr oer mto eowhmoo 解密: 16/6 2-3 c o m e h o m e t o m o r r o w 明文: come home tomorrowE.栅栏加密技术的变形之简单分栏式变换加密技 术,将栅栏加密技术二中的顺序读取方法变成随机读取。 将明文信息一行一行地写入预定长度的矩形中的。假设矩形为6列. 明文:Come home tomorrow 算法:第一列 第二列 第三列 第四列 第五列 第六列 C o m e h o m e t o m o r r o w 密钥:123456 顺序读取方式 密文:cmr oer mto eow hm oo 密钥:461253 随机顺序读取方式 密文:eow oo cmr oer hm mtoF:解密这种单码加密法 Caesar 变换及简单分栏式变换 一般采用语言中的语句的使用频度来破解的.3.近代密码(计算机阶段) 密码形成一门新的学科是在20世纪70年代,这是受计算机科学蓬勃发展刺激和推动的结果。快速电子计算机和现代数学方法一方面为加密技术提供了新的概念和工具,另一方面也给破译者提供了有力武器。计算机和电子学时代的到来给密码设计者带来了前所未有的自由,他们可以轻易地摆脱原先用铅笔和纸进行手工设计时易犯的错误,也不用再面对用电子机械方式实现的密码机的高额费用。总之,利用电子计算机可以设计出更为复杂的密码系统。RSA、Elgamal、背包算法、Rabin、D-H、ECC(椭圆曲线加密算法)。 就整体而言,计算机中的加密问题应包括文件存储加密、口令存储加密、数据库数据加密、电子邮件加密等信息加密和数据传输加密(信道加密)以及密码体制、密钥管理中心等三个方面的内容,下面我们通过加密原理和密码体制来概略地讲讲这三个方面的内容: ? ?2.3.1密码原理 (1)密码原理。所谓加密,就是将正常情况下可懂的文件数据输入密码机, 由密码机变成不可懂的乱码,即将“明文”变成“密文”;所谓解密,就是上述过程的逆过程,即将“密文” ? 变成“明文”。密码机可看做是一个用电子元件实现一种复杂数学运算的机器。复杂数学运算可记为,这里C 密文,p 明文,k 密钥,f是密码算法。K是自变量,C是因变量。不同的K有不同的C,对于某个密码算法f,K的选择范围越大,C的变化就越多,这个密码算法被人破译的难度就越大,保密强度就越高。如何评价K的选择范围大小呢,一般是看K的位数,位数长的(如128位以上)选择范围大,位数短的(如56位)选择范围小。一个国家的密码政策,通常是用位数长的高强度密码(位数可达)保护国家秘密,其它用于保护商业秘密。 ? ?在数据传输加密过程中,收发双方线路密码机使用的是相同的密码算法,注入了相同的密钥,发方向收方发出明文,经密码机变成密文后送上公网通信线路,到达收方后先经密码机解密再送到收方电脑上。密文在公用通信网上传输时,如果被截收,窃密方收到的是不可懂的乱码,无法窃取信息内容。 ? 在文件存储加密中,加密解密卡加解密采用同一种算法和同一个密钥,工作人员用电脑处理文件后先将文件加密再存入磁盘,以防窃密者盗用磁盘窃取文件。工作人员调用该文件时,文件先经解密再从显示器上显示出来以供使用。 ?2.3.2密码体制 密码体制密码体制也叫密码系统,是指能完整地解决信息安全中的机密性、数据完整性、认证、身份识别、可控性及不可抵赖性等问题中的一个或几个的一个系统。对一个密码体制的正确描述,需要用数学方法清楚地描述其中的各种对象、参数、解决问题所使用的算法等。 分为私用密钥加密技术 对称加密 和公开密钥加密技术 非对称加密 。 1、对称密码体制 对称密码体制是一种传统密码体制,也称为私钥密码体制。在对称加密系统中,加密和解密采用相同的密钥。因为加解密密钥相同,需要通信的双方必须选择和保存他们共同的密钥,各方必须信任对方不会将密钥泄密出去,这样就可以实现数据的机密性和完整性。对于具有n个用户的网络,需要n n-1 /2个密钥,在用户群不是很大的情况下,对称加密系统是有效的。但是对于大型网络,当用户群很大,分布很广时,密钥的分配和保存就成了问题。对机密信息进行加密和验证随报文一起发送报文摘要 或散列值 来实现。比较典型的算法有DES Data Encryption Standard数据加密标准 算法及其变形Triple DES 三重DES ,GDES 广义DES ;欧洲的IDEA;日本的FEAL N、RC5等。DES标准由美国国家标准局提出,主要应用于银行业的电子资金转帐 EFT 领域。DES的密钥长度为56bit。Triple DES使用两个独立的56bit密钥对交换的信息进行3次加密,从而使其有效长度达到112bit。RC2和RC4方法是RSA数据安全公司的对称加密专利算法,它们采用可变密钥长度的算法。通过规定不同的密钥长度,,C2和RC4能够提高或降低安全的程度。对称密码算法的优点是计算开销小,加密速度快,是目前用于信息加密的主要算法。它的局限性在于它存在着通信的贸易双方之间确保密钥安全交换的问题。此外,某一贸易方有几个贸易关系,他就要维护几个专用密钥。它也没法鉴别贸易发起方或贸易最终方,因为贸易的双方的密钥相同。另外,由于对称加密系统仅能用于对数据进行加解密处理,提供数据的机密性,不能用于数字签名。因而人们迫切需要寻找新的密码体制。 2、非对称密码体制 非对称密码体制也叫公钥加密技术,该技术就是针对私钥密码体制的缺陷被 提出来的。在公钥加密系统中,加密和解密是相对独立的,加密和解密会使用两把不同的密钥,加密密钥 公开密钥 向公众公开,谁都可以使用,解密密钥 秘密密钥 只有解密人自己知道,非法使用者根据公开的加密密钥无法推算出解密密钥,顾其可称为公钥密码体制。如果一个人选择并公布了他的公钥,另外任何人都可以用这一公钥来加密传送给那个人的消息。私钥是秘密保存的,只有私钥的所有者才能利用私钥对密文进行解密。公钥密码体制的算法中最著名的代表是RSA系统,此外还有:背包密码、McEliece密码、Diffe_Hellman、Rabin、零知识证明、椭圆曲线、EIGamal算法等。公钥密钥的密钥管理比较简单,并且可以方便的实现数字签名和验证。但算法复杂,加密数据的速率较低。公钥加密系统不存在对称加密系统中密钥的分配和保存问题,对于具有n个用户的网络,仅需要2n个密钥。公钥加密系统除了用于数据加密外,还可用于数字签名。公钥加密系统可提供以下功能:A、机密性(Confidentiality):保证非授权人员不能非法获取信息,通过数据加密来实现;B、确认(Authentication):保证对方属于所声称的实体,通过数字签名来实现;C、数据完整性(Data integrity):保证信息内容不被篡改,入侵者不可能用假消息代替合法消息,通过数字签名来实现;D、不可抵赖性(Nonrepudiation):发送者不可能事后否认他发送过消息,消息的接受者可以向中立的第三方证实所指的发送者确实发出了消息,通过数字签名来实现。可见公钥加密系统满足信息安全的所有主要目标。 DES算法为密码体制中的对称密码体制,又被成为美国数据加密标准,是1972年美国IBM公司研制的对称密码体制加密算法。其密钥长度为56位,明文按64位进行分组,将分组后的明文组和56位的密钥按位替代或交换的方法形成密文组的加密方法。 DES加密算法特点:分组比较短、密钥太短、密码生命周期短、运算速度较慢。 DES工作的基本原理是,其入口参数有三个:key、data、mode。 key为加密解密使用的密钥,data为加密解密的数据,mode为其工作模式。当模式为加密模式时,明文按照64位进行分组,形成明文组,key用于对数据加密,当模式为解密模式时,key用于对数据解密。实际运用中,密钥只用到了64位中的56位,这样才具有高的安全性。 DES Data Encryption Standard 算法,于1977年得到美国政府的正式许可,是一种用56位密钥来加密64位数据的方法。虽然56位密钥的DES算法已经风光不在,而且常有用Des加密的明文被破译的报道,但是了解一下昔日美国的标准加密算法总是有益的,而且目前DES算法得到了广泛的应用,在某些场合,仍然发挥着余热。 3.2 DES加密过程详解 DES加密 流程 快递问题件怎么处理流程河南自建厂房流程下载关于规范招聘需求审批流程制作流程表下载邮件下载流程设计 DES是对二元数字分组加密的分组密码算法,分组长度为64比特。每64位明文加密成64位密文,没有数据压缩和扩展,密钥长度为56比特,若输入64比特,则第8,16,24,32,40,48,56,64为奇偶校验位,所以,实际密钥只有56位。DES算法完全公开,其保密性完全依赖密钥。 它的缺点就在于密钥太短。 设明文串m m1m2„m64;密钥串k k1k2„k64。 在后面的介绍中可以看到k8,k16,k24,k32,k40,k48,k56,k64实际上是不起作用的。 DES的加密过程可表示为: DES m IP-1T16??T15„T2??T1??IP(m). 下面是完全16轮DES算法框图: 图3-1 完全16轮DES算法 初始置换IP 初始置换是将输入的64位明文分为8个数组,每一组包括8位,按1至64编号。 IP的置换规则如下表: 表3-1 IP置换规则 58 50 42 34 26 18 10 2 60 52 44 36 28 20 12 4 62 54 46 38 30 22 14 6 64 56 48 40 32 24 16 8 57 49 41 33 25 17 9 1 59 51 43 35 27 19 11 3 61 53 45 37 29 21 13 5 63 55 47 39 31 23 15 7 即将输入的第58位换到第1位,第50位换到第2位„„,依次类推,最后一位是原来的第7位。 IP-1是IP的逆置换表 逆置换规则如下表所示:由于第1位经过初始置换后,已处于第40位。逆置换就是再将第40位换回到第1位。 表3-2 IP-1置换 40 8 48 16 56 24 64 32 39 7 47 15 55 23 63 31 38 6 46 14 54 22 62 30 37 5 45 13 53 21 61 29 36 4 44 12 52 20 60 28 35 3 43 11 51 19 59 27 34 2 42 10 50 18 58 26 33 1 41 9 49 17 57 25 初始置换IP及 其逆置换IP-1并没有密码学意义,因为置换前后的一一对应关系是已知的。它 们的作用在于打乱原来输入明文的ASC?码字划分的关系,并将原来明文的第位 m8,m16,m24,m32,m40,m48,m56,m64位(校验位)变成IP的输出的一个 字节。 DES算法的迭代过程 图3-2 DES算法的迭代过程图 图中Li-1和Ri-1分别是第i-1次迭代结果的左右两部分,各32比特。即 Li Ri-1, Ri Li-1? f Ri-1,ki 。其中轮密钥Ki为48比特,函数F R,K 的计 算过程如图1.5所示。轮输入的右半部分R为32比特,R首先被扩展成48比特, 扩展过程由表3定义,其中将R的16个比特各重复一次。扩展后的48比特再与 子密钥Ki异或,然后再通过一个S盒,产生32比特的输出。该输出再经过一个 由表4定义的置换,产生的结果即为函数F R,K 的输出。 表3-3 扩展E 32 1 2 3 4 5 4 5 6 7 8 9 8 9 10 11 12 13 12 13 14 15 16 17 16 17 18 19 20 21 20 21 22 23 24 25 24 25 26 27 28 29 28 29 30 31 32 1 ki是由64比特的初始密钥(亦称种子密钥)导出的第i轮子密钥,ki是 48比特 DES算法的关键是f Ri-1,ki 的功能,其中的重点又在S-盒(Substitution Boxes)上。F函数的输出是32比特。 图3-3 F函数计算过程图 将R经过一个扩展运算E变为48位,记为E(R)。计算E(R)K B,对B 施行代换S,此代换由8个代换盒组成,即S-盒。每个S-盒有6个输入,4个输 出,将B依次分为8组,每组6位,记B B1B2B3B4B5B6B7B8其中Bj作为第j 个S-盒的输入,其输出为Cj,C C1C2C3C4C5C6C7C8就是代换S的输出,所以 代换S是一个48位输入,32位输出的选择压缩运算,将结果C再实行一个置换 P(表4),即得F R,K 。 其中,扩展运算E与置换P主要作用是增加算法的扩散效果。S-盒是DES 算法中唯一的非线性部件,当然也就是整个算法的安全性所在。它的设计原则与 过程一直因为种种不为人知的因素所限,而未被公布出来。 S-盒如下表: 表3-4 S-盒函数 S1 14 4 13 1 2 15 11 8 3 10 6 12 5 9 0 7 0 15 7 4 14 2 13 1 10 6 12 11 9 5 3 8 4 1 14 8 13 6 2 11 15 12 9 7 3 10 5 0 15 12 8 2 4 9 1 7 5 11 3 14 10 0 6 13 S2 15 1 8 14 6 11 3 4 9 7 2 13 12 0 5 10 3 13 4 7 15 2 8 14 12 0 1 10 6 9 11 5 0 14 7 11 10 4 13 1 5 8 12 6 9 3 2 15 13 8 10 1 3 15 4 2 11 6 7 12 0 5 14 9 S3 10 0 9 14 6 3 15 5 1 13 12 7 11 4 2 8 13 7 0 9 3 4 6 10 2 8 5 14 12 11 15 1 13 6 4 9 8 15 3 0 11 1 2 12 5 10 14 7 1 10 13 0 6 9 8 7 4 15 14 3 11 5 2 12 S4 7 13 14 3 0 6 9 10 1 2 8 5 11 12 4 15 13 8 11 5 6 15 0 3 4 7 2 12 1 10 14 9 10 6 9 0 12 11 7 13 15 1 3 14 5 2 8 4 3 15 0 6 10 1 13 8 9 4 5 11 12 7 2 14 S5 2 12 4 1 7 10 11 6 8 5 3 15 13 0 14 9 14 11 2 12 4 7 13 1 5 0 15 10 3 9 8 6 4 5 1 11 10 13 7 8 15 9 12 5 6 3 0 14 11 8 12 7 1 14 2 13 6 15 0 9 10 4 5 3 S6 12 1 10 15 9 2 6 8 0 13 3 4 14 7 5 11 10 15 4 2 7 12 9 5 6 1 13 14 0 11 3 8 9 14 15 5 2 8 12 3 7 0 4 10 1 13 11 6 4 3 2 12 9 5 15 10 11 14 1 7 6 0 8 13 S7 4 11 2 14 15 0 8 13 3 12 9 7 5 10 6 1 13 0 11 7 4 9 1 10 14 3 5 12 2 15 8 6 1 4 11 13 12 3 7 14 10 15 6 8 0 5 9 2 6 11 13 8 1 4 10 7 9 5 0 15 14 2 3 12 S 13 2 8 4 6 15 11 1 10 9 3 14 5 0 12 7 1 15 13 8 10 3 7 4 12 5 6 11 0 14 9 2 7 11 4 1 9 12 14 2 0 6 10 13 15 3 5 8 2 1 14 7 4 10 8 13 15 12 9 0 3 5 6 11 S-盒的置换规则为: 取 0,1,„,15 上的4个置换,即它的4个排列排成4行,得一4*16矩 阵。若给定该S盒的6个输入为b0 b1 b2 b3 b4 b5,在Si表中找出b0 b5行, b1b2 b3b4列的元素,以4位二进制表示该元素,此为S-盒Si的输出。 例2.1 S2的输入为101011, b1 1,b6 1,b1 b6 11 2 3 b2 b3 b4 b5 2 0101 2 5 查S2表可知第3行第5列的输出是15,15的二进制表示为1111。 则S2的输出为1111。8个S-盒的代换方式都是一样的。 S盒输出的32比特经P置换,P置换的功能是将32位的输入,按以下顺序 置换,然后输入仍为32比特。P置换的顺序如表3.5: 表3-5 置换P_PERMUTE[32] 16 7 20 21 29 12 28 17 1 15 23 26 5 18 31 10 2 8 24 14 32 27 3 9 19 13 30 6 22 11 4 25 子密钥生成 图3-4 DES子密钥生成流程图 图3.4给出了子密钥产生的流程图。首先对初始密钥经过置换PC-1(表 3.6[7]),将初始密钥的8个奇偶校验位剔除掉,而留下真正的56比特初始密钥。 表3-6 密钥置换PC_PERMUTE1[56] 57 49 41 33 25 17 9 1 58 50 42 34 26 18 10 2 59 51 43 35 27 19 11 3 60 52 44 36 63 55 47 39 31 23 15 7 62 54 46 38 30 22 14 6 61 53 45 37 29 21 13 5 28 20 12 4 然后将此56位分为C0,D0两部分,各28比特,C0,D0如下: C0 k57k49„„k44k36 D0 k63k55„„k12k4 然后分别进行一个循环左移函数LS1,得到C1,D1,将C1(28位),D1(28 位)连成56比特数据,再经过密钥置换PC-2(表2.7)做重排动作,从而便得 到了密钥K1(48位)。依次类推,便可得到K2,K3„„K16。 表3-7 密钥置换PC_PERMUTE2[48] 14 17 11 24 1 5 3 28 15 6 21 10 23 19 12 4 26 8 16 7 27 20 13 2 41 52 31 37 47 55 30 40 51 45 33 48 44 49 39 56 34 53 46 42 50 36 29 32 其中LS1(1?i?16)表示一个或两个位置的循环左移,当i 1,2,9,16时,移一个位置,当i 3,4,5,6,7,8,10,11,12,13,14,15时,移两个位置。 DES解密过程 DES算法的解密过程跟加密过程是一样的,区别仅仅在于第一次迭代时用密钥k16,第二次k15、„„,最后一次用k1,算法本身没有任何变化。 第4章 DES算法的C++实现 DES加密中所使用的函数 void IP_PM unsigned int x[2] ip置换函数 void IP_PM1 unsigned int x[2] ip 逆置换 void PC1 unsigned int x[2] 密钥置换 64位到56位 void PC2 unsigned x[2] 密钥置换 56位到 48位 unsigned int PM unsigned int x 32位置换 unsigned int Sbox unsigned int x[2] s 盒置换 void Extend unsigned int x,unsigned int y[2] 扩展换算 unsigned int LTr unsigned int x,unsigned int y 28位密钥 移位 void Ckey unsigned int x[2],unsigned int y[16][2] 密钥生成 void cryption unsigned int text[2],unsigned int key[16][2],int flag unsigned int chtoint char ch[4] void inttoch _int64 temp,char ch[4] DES实现文件加密函数及其代码 运用DES算法可以对目标进行加密使其成为密文,下面函数便是对运用算法对文件加密,使得文件内容变得不可读取。 int filecryption char *fname,char ch[9],int crypflag FILE *fp; char ckey1[4] '\0','\0','\0','\0' ,ckey2[4] '\0','\0','\0','\0' ; unsigned keyn[2]; unsigned skeyn[16][2]; char text1[4],text2[4]; unsigned int textn[2]; ckey1[0] ch[0]; ckey1[1] ch[1]; ckey1[2] ch[2]; ckey1[3] ch[3]; ckey2[0] ch[4]; ckey2[1] ch[5]; ckey2[2] ch[6]; ckey2[3] ch[7]; keyn[0] chtoint ckey1 ; keyn[1] chtoint ckey2 ; Ckey keyn,skeyn ; fp fopen fname,"rb+" ; if fp NULL return 2; int ftel fseek fp,0,2 ; ftel ftell fp ; ftel ftel%8; for int j ftel;0 j&&j 7;j++ fputc ' ',fp ; char filetemp[20000]; int filelength ftell fp ; rewind fp ; fread filetemp,filelength,1,fp ; int endflag 0; for ;endflag+8 filelength; text1[0] filetemp[endflag+0]; text1[1] filetemp[endflag+1]; text1[2] filetemp[endflag+2]; text1[3] filetemp[endflag+3]; text2[0] filetemp[endflag+4]; text2[1] filetemp[endflag+5]; text2[2] filetemp[endflag+6]; text2[3] filetemp[endflag+7]; textn[0] chtoint text1 ; textn[1] chtoint text2 ; cryption textn,skeyn,crypflag ; inttoch textn[0],text1 ; inttoch textn[1],text2 ; filetemp[endflag+0] text1[0]; filetemp[endflag+1] text1[1]; filetemp[endflag+2] text1[2]; filetemp[endflag+3] text1[3]; filetemp[endflag+4] text2[0]; filetemp[endflag+5] text2[1]; filetemp[endflag+6] text2[2]; filetemp[endflag+7] text2[3]; endflag+ 8; rewind fp ; fwrite filetemp,filelength,1,fp ; fclose fp ; return 1; 第5章 DES加密算法实例 5.1 实例程序 文件加密程序 这是文件加密系统 的截图 ,使用编写软件为vc++6.0 图5-1 文件加密程序截图 使用此程序加密文件使其成为无法识别的密文,从而达到对里面内容的保 密。 而文件内容就好比移动充值卡的卡号,只有知道密钥的人才能得到真正的卡 号,从而达到充值的目的。所以加密成功后密钥的管理也是很重要的一个环节。 加密前文件内容截图 图5-2 文件加密前 加密后文件内容截图 图5-3 文件加密后截图 结 论 经过多月的学习,在老师和同学的支持与帮助之下我顺利地完成了 致 谢 我首先要感谢我的导师给予我的帮助与关怀,从他的身上我学到的不仅仅是知识,更多的是做人。老师严谨治学,为人谦逊,在论文的写作过程中,老师没有给我任何压力,让我拥有了很大的发挥空间。 一日为师终身为父。在此,我也要向年来辛勤培养和教育,关心,帮助我的恩师们表示我最诚挚的敬意和感谢~记得李老师说过,对于父母不能用感谢,更多的是愧疚。的确,每每想到我的父母,眼底总是涌动出愧疚的泪水,他们给了我生命、思想和全部的爱,在我近二十年的读书生涯中,他们用自己微薄的力量保护着我,用自己辛勤的劳动支持着我,我无以为报,只能让自己在今后的道路上踏实向上,走好每一步。 同窗的友情同样难忘,湖畔、南强灯下,我们一同嬉笑过、拼搏过,这一路与你们同行真好!感谢我所有朋友对我的包容、体谅,谢谢大家 也许永远没有那一天,前程如朝霞般绚烂;也许永远没有那一天,成功如灯火般辉煌;也许只能是这样,攀援却达不到顶峰,也许一路走来,只为今天在我毕业论文的最后, 对所有关心帮助我的人说一声:谢谢„„ 邱志聪. 信息安全与密码学[M]. 北京:清华大学出版社,2007年. [5] K.Campbell , M.Wiener. DES is not a group,Advances in Cryptology-CRYPTO ’92[M].Lecture Notes in Computer Science 740 Springer-Verlag,1993, 512-520. [6] 孙淑玲 . 应用密码学[M]. 北京: 清华大学出版社,2004年, 11-19. [7] 陈刚 等 .移动通信充值卡加密系统的数据安全策略[M]. 北方交通 大学计算机科学技术系 ,北京10004. [8] 肖国镇 . 密码学现状与展望[J].电子学报.第5期 , 1987.9. [9] 胡忠旭 等.基于数字串加密算法的研究与实现[J].红河学院学报. 第4期 ,2011.8. [10] 刘晓真 等 .几种加密算法安全性的概率分析[J]. 河南教育学院学报 自然科学版 .第4期 ,2004.12. [11] 卢开橙 等.计算机密码学―计算机网络中的数据保密与安全[M].北 京:清华大学出版社,2003年,38-48. [12] 赖溪松 等.计算机密码学及其应用[M].北京:国防工业出版社,2007, 43-49. [13] D.Coppersmith . The Data Encryption Standard DES and its strength against attacks[M]. IBM Journal of Research and Development, 38 3 .243-250. [14] Richard Spillman著,叶阮健,曹英,张长富译.经典密码学与现代密码 学[M].北京:清华大学出版社,2005,124-133. [15] Oded Goldreich. Foundations of Cryptography Volume ? Basic Applications[M].BEIJING:Publishing House of Electronics Industry,2005 年,375-379. 附 录 DES实现文件加密源程序代码: #include "stdafx.h" #include "file_des_mfc.h" #include"stdio.h" #include"iostream.h" #include "math.h" #include "stdlib.h" #include "file_des_mfcDoc.h" #include "file_des_mfcView.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] __FILE__; #endif CString s; int sflag 0; ///////////////////////////////////////////////////////////////// //////////// // CFile_des_mfcView IMPLEMENT_DYNCREATE CFile_des_mfcView, CFormView BEGIN_MESSAGE_MAP CFile_des_mfcView, CFormView // AFX_MSG_MAP CFile_des_mfcView ON_BN_CLICKED IDC_SCAN, OnScan ON_BN_CLICKED IDC_OPEN, OnOpen ON_BN_CLICKED IDC_ENCRYPTION, OnEncryption ON_BN_CLICKED IDC_DECRYPTION, OnDecryption // AFX_MSG_MAP // Standard printing commands ON_COMMAND ID_FILE_PRINT, CFormView::OnFilePrint ON_COMMAND ID_FILE_PRINT_DIRECT, CFormView::OnFilePrint ON_COMMAND ID_FILE_PRINT_PREVIEW, CFormView::OnFilePrintPreview END_MESSAGE_MAP ///////////////////////////////////////////////////////////////// //////////// // CFile_des_mfcView construction/destruction CFile_des_mfcView::CFile_des_mfcView : CFormView CFile_des_mfcView::IDD // AFX_DATA_INIT CFile_des_mfcView m_FN _T "" ; m_key _T "" ; // AFX_DATA_INIT // TODO: add construction code here CFile_des_mfcView::~CFile_des_mfcView void CFile_des_mfcView::DoDataExchange CDataExchange* pDX CFormView::DoDataExchange pDX ; // AFX_DATA_MAP CFile_des_mfcView DDX_Text pDX, IDC_FileName, m_FN ; DDX_Text pDX, IDC_Key, m_key ; // AFX_DATA_MAP BOOL CFile_des_mfcView::PreCreateWindow CREATESTRUCT& cs // TODO: Modify the Window class or styles here by modifying // the CREATESTRUCT cs return CFormView::PreCreateWindow cs ; void CFile_des_mfcView::OnInitialUpdate CFormView::OnInitialUpdate ; GetParentFrame - RecalcLayout ; ResizeParentToFit ; ///////////////////////////////////////////////////////////////////////////// // CFile_des_mfcView printing BOOL CFile_des_mfcView::OnPreparePrinting CPrintInfo* pInfo // default preparation return DoPreparePrinting pInfo ; void CFile_des_mfcView::OnBeginPrinting CDC* /*pDC*/, CPrintInfo* /*pInfo*/ // TODO: add extra initialization before printing void CFile_des_mfcView::OnEndPrinting CDC* /*pDC*/, CPrintInfo* /*pInfo*/ // TODO: add cleanup after printing void CFile_des_mfcView::OnPrint CDC* pDC, CPrintInfo* /*pInfo*/ // TODO: add customized printing code here ///////////////////////////////////////////////////////////////// //////////// // CFile_des_mfcView diagnostics #ifdef _DEBUG void CFile_des_mfcView::AssertValid const CFormView::AssertValid ; void CFile_des_mfcView::Dump CDumpContext& dc const CFormView::Dump dc ; CFile_des_mfcDoc* CFile_des_mfcView::GetDocument // non-debug version is inline ASSERT m_pDocument- IsKindOf RUNTIME_CLASS CFile_des_mfcDoc ; return CFile_des_mfcDoc* m_pDocument; #endif //_DEBUG ///////////////////////////////////////////////////////////////// //////////// // CFile_des_mfcView message handlers void CFile_des_mfcView::OnScan // TODO: Add your control notification handler code here UpdateData TRUE ; CFile fp; CFileDialog file_dlg TRUE,"EC","*.*",NULL,"*.*" ; if file_dlg.DoModal ! IDOK return; s file_dlg.GetPathName ; m_FN s; sflag 1; UpdateData FALSE ; void CFile_des_mfcView::OnOpen // TODO: Add your control notification handler code here UpdateData TRUE ; system s ; UpdateData FALSE ; /* DES 中的各个子函数 */ char IP_PERMUTE[64] \ 58,50,42,34,26,18,10,2,\ 60,52,44,36,28,20,12,4,\ 62,54,46,38,30,22,14,6,\ 64,56,48,40,32,24,16,8,\ 57,49,41,33,25,17,9,1,\ 59,51,43,35,27,19,11,3,\ 61,53,45,37,29,21,13,5,\ 63,55,47,39,31,23,15,7 ; char IP_PERMUTE_1[64] \ 40,8,48,16,56,24,64,32,\ 39,7,47,15,55,23,63,31,\ 38,6,46,14,54,22,62,30,\ 37,5,45,13,53,21,61,29,\ 36,4,44,12,52,20,60,28,\ 35,3,43,11,51,19,59,27,\ 34,2,42,10,50,18,58,26,\ 33,1,41,9,49,17,57,25 ; char P_PERMUTE[32] \ 16,7,20,21,\ 29,12,28,17,\ 1,15,23,26,\ 5,18,31,10,\ 2,8,24,14,\ 32,27,3,9,\ 19,13,30,6,\ 22,11,4,25 ; char S_BOX1[4][16] \ 14,4,13,1,2,15,11,8,3,10,6,12,5,9,0,7,\ 0,15,7,4,14,2,13,1,10,6,12,11,9,5,3,8,\ 4,1,14,8,13,6,2,11,15,12,9,7,3,10,5,0,\ 15,12,8,2,4,9,1,7,5,11,3,14,10,0,6,13 ; char S_BOX2[4][16] \ 15,1,8,14,6,11,3,4,9,7,2,13,12,0,5,10,\ 3,13,4,7,15,2,8,14,12,0,1,10,6,9,11,5,\ 0,14,7,11,10,4,12,1,5,8,12,6,9,3,2,15,\ 13,8,10,1,3,15,4,2,11,6,7,12,0,5,14,9 ; char S_BOX3[4][16] \ 10,0,9,14,6,3,15,5,1,13,12,7,11,4,2,8,\ 13,7,0,9,3,4,6,10,2,8,5,14,12,11,15,1,\ 13,6,4,9,8,15,3,0,11,1,2,12,5,10,14,7,\ 1,10,13,0,6,9,8,7,4,15,14,3,11,5,2,12, ; char S_BOX4[4][16] \ 7,13,14,3,0,6,9,10,1,2,8,5,11,12,4,15,\ 13,8,11,5,6,15,0,3,4,7,2,12,1,10,14,9,\ 10,6,9,0,12,11,7,13,15,1,3,14,5,2,8,4,\ 3,15,0,6,10,1,13,8,9,4,5,11,12,7,2,14 ; char S_BOX5[4][16] \ 2,12,4,1,7,10,11,6,8,5,3,15,13,0,14,9,\ 14,11,2,12,4,7,13,1,5,0,15,10,3,9,8,6,\ 4,2,1,11,10,13,7,8,15,9,12,5,6,3,0,14,\ 11,8,12,7,1,14,2,13,6,15,0,9,10,4,5,3 ; char S_BOX6[4][16] \ 12,1,10,15,9,2,6,8,0,13,3,4,14,7,5,11,\ 10,15,4,2,7,12,9,5,6,1,13,14,0,11,3,8,\ 9,14,15,5,2,8,12,3,7,0,4,10,1,13,11,6,\ 4,3,2,12,9,5,15,10,11,14,1,7,6,0,8,13 ; char S_BOX7[4][16] \ 4,11,2,14,15,0,8,13,3,12,9,7,5,10,6,2,\ 13,0,11,7,4,9,1,10,14,3,5,12,2,15,8,6,\ 1,4,11,13,12,3,7,14,10,15,6,8,0,5,9,2,\ 6,11,13,8,1,4,10,7,9,5,0,15,14,2,3,12 ; char S_BOX8[4][16] \ 13,2,8,4,6,14,11,1,10,9,3,14,5,0,12,7,\ 1,15,13,8,10,3,7,4,12,5,6,11,0,14,9,2,\ 7,11,4,1,9,12,14,2,0,6,10,13,15,3,5,8,\ 2,1,14,7,4,10,8,13,15,12,9,0,3,5,6,11 ; char PC_PERMUTE1[56] \ 57,49,41,33,25,17,9,\ 1,58,50,42,34,26,18,\ 10,2,59,51,43,35,27,\ 19,11,3,60,52,44,36,\ 63,55,47,39,31,23,15,\ 7,62,54,46,38,30,22,\ 14,6,61,53,45,37,29,\ 21,13,5,28,20,12,4 ; char PC_PERMUTE2[48] \ 14,17,11,24,1,5,\ 3,28,15,6,21,10,\ 23,19,12,4,26,8,\ 16,7,27,20,13,2,\ 41,52,31,37,47,55,\ 30,40,51,45,33,48,\ 44,49,39,56,23,53,\ 46,42,50,36,29,32 ; char LTranslocation[16] \ 1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1 ; void IP_PM unsigned int x[2] ///////////ip置换 unsigned temp[2],flag; temp[1] x[1]; temp[0] x[0]; x[0] 0; x[1] 0; for int i 0;i 64;i++ if i 32 if IP_PERMUTE[i] 32 flag 64-IP_PERMUTE[i]; flag temp[1] flag; flag flag&0x1; x[0] 2*x[0]+ flag; else flag 32-IP_PERMUTE[i]; flag temp[0] flag; flag flag&0x1; x[0] 2*x[0]+ flag; else if IP_PERMUTE[i] 32 flag 64-IP_PERMUTE[i]; flag temp[1] flag; flag flag&0x1; x[1] 2*x[1]+ flag; else flag 32-IP_PERMUTE[i]; flag temp[0] flag; flag flag&0x1; x[1] 2*x[1]+ flag; void IP_PM1 unsigned int x[2] /////////////ip 逆置换 unsigned int temp[2],flag; temp[1] x[1]; temp[0] x[0]; x[0] 0; x[1] 0; for int i 0;i 64;i++ if i 32 if IP_PERMUTE_1[i] 32 flag 64-IP_PERMUTE_1[i]; flag temp[1] flag; flag flag&0x1; x[0] 2*x[0]+ flag; else flag 32-IP_PERMUTE_1[i]; flag temp[0] flag; flag flag&0x1; x[0] 2*x[0]+ flag; else if IP_PERMUTE_1[i] 32 flag 64-IP_PERMUTE_1[i]; flag temp[1] flag; flag flag&0x1; x[1] 2*x[1]+ flag; else flag 32-IP_PERMUTE_1[i]; flag temp[0] flag; flag flag&0x1; x[1] 2*x[1]+ flag; void PC1 unsigned int x[2] ////////////// 密钥置换 64位到56 位 unsigned int temp[2],flag; temp[1] x[1]; temp[0] x[0]; x[0] 0; x[1] 0; for int i 0;i 56;i++ if i 28 if PC_PERMUTE1[i] 32 flag 64-PC_PERMUTE1[i]; flag temp[1] flag; flag flag&0x1; x[0] 2*x[0]+ flag; else flag 32-PC_PERMUTE1[i]; flag temp[0] flag; flag flag&0x1; x[0] 2*x[0]+ flag; else if PC_PERMUTE1[i] 32 flag 64-PC_PERMUTE1[i]; flag temp[1] flag; flag flag&0x1; x[1] 2*x[1]+ flag; else flag 32-IP_PERMUTE_1[i]; flag temp[0] flag; flag flag&0x1; x[1] 2*x[1]+ flag; void PC2 unsigned x[2] //////////// 密钥置换 56位到 48位 unsigned int temp[2],flag; temp[1] x[1]; temp[0] x[0]; x[0] 0; x[1] 0; for int i 0;i 48;i++ if i 24 if PC_PERMUTE2[i] 28 flag 56-PC_PERMUTE2[i]; flag temp[1] flag; flag flag&0x1; x[0] 2*x[0]+ flag; else flag 28-PC_PERMUTE2[i]; flag temp[0] flag; flag flag&0x1; x[0] 2*x[0]+ flag; else if PC_PERMUTE2[i] 28 flag 56-PC_PERMUTE2[i]; flag temp[1] flag; flag flag&0x1; x[1] 2*x[1]+ flag; else flag 28-PC_PERMUTE2[i]; flag temp[0] flag; flag flag&0x1; x[1] 2*x[1]+ flag; unsigned int PM unsigned int x /////////////32位置换 unsigned int temp,flag; unsigned int i; temp x; x 0; for i 0;i 32;i++ flag temp P_PERMUTE[i]; flag flag&0x1; x x*2+flag; return x; unsigned int Sbox unsigned int x[2] /////////////////// s 合置换 unsigned int ret 0; unsigned int i,j; unsigned int temp 0,flag 0; for i 0,j 0;i 8;i++ if i 4 j 1; temp x[j] 3-i%4 *6 ; flag temp&0x3; temp temp 2; temp temp&0xf; switch i case 0:temp S_BOX1[flag][temp];break; case 1:temp S_BOX2[flag][temp];break; case 2:temp S_BOX3[flag][temp];break; case 3:temp S_BOX4[flag][temp];break; case 4:temp S_BOX5[flag][temp];break; case 5:temp S_BOX6[flag][temp];break; case 6:temp S_BOX7[flag][temp];break; case 7:temp S_BOX8[flag][temp];break; ret ret 4; ret+ temp; return ret; void Extend unsigned int x,unsigned int y[2] /////////////扩 展换算 unsigned int i; unsigned int temp 0; y[0] 0; y[1] 0; for i 0;i 8;i++ temp x 8* 7-i +7 &0x1; temp temp 4 + x 8* 7-i &0xf ; temp temp*2+ x 8* 7-i +7 &0x1 ; if i 4 y[0] y[0] 6 +temp; else y[1] y[1] 6 +temp; unsigned int LTr unsigned int x,unsigned int y ////////////// 28位密钥 移位 unsigned int temp; unsigned int flag; flag LTranslocation[x-1]; temp y 28-flag ; if flag 1 temp temp&0x1; else temp temp&0x3; y y flag +temp; return y; void Ckey unsigned int x[2],unsigned int y[16][2] /////////// 密钥生成 unsigned int i; PC1 x ; for i 0;i 16;i++ x[0] LTr i+1,x[0] ; x[1] LTr i+1,x[1] ; y[i][0] x[0]; y[i][1] x[1]; PC2 y[i] ; void cryption unsigned int text[2],unsigned int key[16][2],int flag unsigned int temp; unsigned int ex[2]; int i 0; if flag 1 i 15; for ;; temp text[1]; Extend text[1],ex ; ex[0] ex[0]^key[i][0]; ex[1] ex[1]^key[i][1]; text[1] Sbox ex ; text[1] PM text[1] ; text[1] text[0]^text[1]; text[0] temp; if flag 0 i++; if i 16 break; else i--; if i 0 break; temp text[1]; text[1] text[0]; text[0] temp; unsigned int chtoint char ch[4] unsigned int temp; unsigned int intt[4]; for int i 0;i 4;i++ int flag ch[i] 7 &0x1; if flag 1 intt[i] 128+ ch[i]&0x7f ; else intt[i] ch[i]; temp 256*256*256*intt[0]+256*256*intt[1]+256*intt[2]+intt[3]; return temp; void inttoch _int64 temp,char ch[4] ch[0] temp/ 256*256*256 ; ch[1] temp-256*256*256*ch[0] / 256*256 ; ch[2] temp-256*256*256*ch[0]-256*256*ch[1] /256; ch[3] temp-256*256*256*ch[0]-256*256*ch[1]-256*ch[2]; /* 以下是文件的加解密过程 */ int filecryption char *fname,char ch[9],int crypflag FILE *fp; char ckey1[4] '\0','\0','\0','\0' ,ckey2[4] '\0','\0','\0','\0' ; unsigned keyn[2]; unsigned skeyn[16][2]; char text1[4],text2[4]; unsigned int textn[2]; ckey1[0] ch[0]; ckey1[1] ch[1]; ckey1[2] ch[2]; ckey1[3] ch[3]; ckey2[0] ch[4]; ckey2[1] ch[5]; ckey2[2] ch[6]; ckey2[3] ch[7]; keyn[0] chtoint ckey1 ; keyn[1] chtoint ckey2 ; Ckey keyn,skeyn ; fp fopen fname,"rb+" ; if fp NULL return 2; int ftel fseek fp,0,2 ; ftel ftell fp ; ftel ftel%8; for int j ftel;0 j&&j 7;j++ fputc ' ',fp ; char filetemp[20000]; int filelength ftell fp ; rewind fp ; fread filetemp,filelength,1,fp ; int endflag 0; for ;endflag+8 filelength; text1[0] filetemp[endflag+0]; text1[1] filetemp[endflag+1]; text1[2] filetemp[endflag+2]; text1[3] filetemp[endflag+3]; text2[0] filetemp[endflag+4]; text2[1] filetemp[endflag+5]; text2[2] filetemp[endflag+6]; text2[3] filetemp[endflag+7]; textn[0] chtoint text1 ; textn[1] chtoint text2 ; cryption textn,skeyn,crypflag ; inttoch textn[0],text1 ; inttoch textn[1],text2 ; filetemp[endflag+0] text1[0]; filetemp[endflag+1] text1[1]; filetemp[endflag+2] text1[2]; filetemp[endflag+3] text1[3]; filetemp[endflag+4] text2[0]; filetemp[endflag+5] text2[1]; filetemp[endflag+6] text2[2]; filetemp[endflag+7] text2[3]; endflag+ 8; rewind fp ; fwrite filetemp,filelength,1,fp ; fclose fp ; return 1; void CFile_des_mfcView::OnEncryption // TODO: Add your control notification handler code here UpdateData TRUE ; char ch_Key[9]; char *fname LPSTR LPCTSTR m_FN; if fname[0] '\0' MessageBox "没有打开文件!!!" ; return; int kf GetDlgItemText IDC_Key,ch_Key,9 ; if kf 0 MessageBox "没有密钥!" ; return; if kf 7 MessageBox "密钥长度过短! 重新输入!!!!" ; return; int flag filecryption fname,ch_Key,0 ; if flag 1 MessageBox "加密完成!" ; if flag 2 MessageBox "没有打开文件!" ; UpdateData FALSE ; void CFile_des_mfcView::OnDecryption // TODO: Add your control notification handler code here UpdateData TRUE ; char ch_Key[9]; char *fname LPSTR LPCTSTR m_FN; if fname[0] '\0' MessageBox "没有打开文件!!!" ; return; int kf GetDlgItemText IDC_Key,ch_Key,9 ; if kf 0 MessageBox "没有密钥!" ; return; if kf 7 MessageBox "密钥长度过短! 重新输入!!!!" ; return; int flag filecryption fname,ch_Key,1 ; if flag 1 MessageBox "解密完成!" ; if flag 2 MessageBox "没有打开文件!" ; UpdateData FALSE ; 24 成都理工大学2012届本科毕业设计 论文 初始密钥K(64bit) PC-1 D0(28bit) C0(28bit) LS1 LS1 K1 PC-2 D1 C1 LS2 LS2 LS16 LS16 K16 PC-2 D16 C16
本文档为【移动充值卡密加密技术毕业论文】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_079973
暂无简介~
格式:doc
大小:92KB
软件:Word
页数:0
分类:工学
上传时间:2017-09-02
浏览量:27