加密解密系统研究毕业论文
摘要: DES算法DES算法为密码体制中的对称密码体制,又被成为美国数据加密标准
题 目 加密解密系统研究
学 院 台州广播电视大学
专 业 计算机科学与技术
年 级 09春计算机信息管理
学 号 093080575
姓 名 余运泉
指 导 教 师 杨帆
成 绩___________________
2010年11月27日
文件的加密与解密算法研究与实现
摘要:随着信息社会的到来,人们在享受信息资源所带来的巨大的利益的同时,也面临着信
息安全的严峻考验。信息安全已经成为世界性的现实问题,信息安全问题已威胁到国家的政
治、经济、军事、文化、意识形态等领域,同时,信息安全问题也是人们能否护自己的个人
隐私的关键。信息安全是社会稳定安全的必要前提条件。
本文是一篇讨论关于常用文件加密解密算法的毕业设计论文,它详细的讲述了文件加密解密算法实现的过程中所用到的方法、技术。对公钥密码体制和私钥密码体制进行了分析和研究,并对公钥密码体制和私钥密码体制的代表RSA算法和DES算法进行了研究和比较。
关键词:解密;文件加密;密码体制;DES;RSA
Design and Implementation ofDocument tagging software
Abstract: With the advent of the information society, people in theenjoyment of information resources brought about tremendous benefits, but alsofaced with a letter
Income security, a severe test. Information security has become a worldwidereality, information security has been a threat to the country's political
Governance, economic, military, cultural, ideological and other areas at thesame time, the issue of information security is also a possibility of retainingtheir own personal
Privacy key. Information security and social stability is a necessaryprecondition for security.
This article is a discussion paper on encryption and decryptionalgorithms commonly used in graduate design thesis, which documents in detailabout the encryption and decryption process of algorithm used in the methodsand techniques. Of public-key cryptosystem private key cryptosystem andanalysis and research, and public-key cryptosystem and on behalf of private keycryptography algorithm RSA algorithm and DES have been studied and compared.
Keywords: Decryption;file encryption; cryptosystem; DES; RSA
摘要……………………………………………………………………2
目录............................................................................................................................................................................ 3
1、前言...................................................................................................................................................................... 4
2、需求分析............................................................................................................................................................. 5
2.1 系统概述...................................................................................................................................................... 5
2.1.1概述...................................................................................................................................................... 5
2.2密码学的发展.............................................................................................................................................. 5
2.3文件加密解密中密码体制研究................................................................................................................ 8
2.3.1密码原理.............................................................................................................................................. 8
2.3.2密码体制................................................................................................................................................ 9
4、分组加密解密算法-DES算法...................................................................................................................... 10
4.1DES算法.................................................................................................................................................... 10
3.2 RSA算法.................................................................................................................................................... 11
3.2工作原理..................................................................................................................................................... 11
3.2.1优点....................................................................................................................................................... 15
3.2.1 缺点...................................................................................................................................................... 15
4.2 0.DES加密流程图:............................................................................................................................... 17
4.3 详细解析.................................................................................................................................................. 18
1 取得64位的密钥,每个第8位作为奇偶校验位。........................................................................ 18
1-2、变换密钥。......................................................................................................................................... 18
1-2-1、舍弃64位密钥中的奇偶校验位,根据下表(PC-1)进行密钥变换得到56位的密钥,在变换中,奇偶校验位以被舍弃。................................................................................................................................................ 18
1-2-2、将变换后的密钥分为两个部分................................................................................................... 18
1-2-3、生成16个子密钥........................................................................................................................... 18
2、处理64位的数据.................................................................................................................................. 19
2-1、取得64位的数据.............................................................................................................................. 19
2-2、将64位数据按下表变换(IP)..................................................................................................... 19
2-3、将变换后的数据分为两部分........................................................................................................... 20
2-4、用16个子密钥加密数据................................................................................................................. 20
2-4-1、将32位的R[I-1]按下表............................................................................................................... 20
5 DES算法实例演示....................................................................................................................................... 24
5.1 实例程序 DES TOOL............................................................................................................................. 24
5.2 文件功能描述:DES加密类 头文件.................................................................................................. 25
5 测试分析............................................................................................................................................................. 29
6 心得体会............................................................................................................................................................. 30
参考文献................................................................................................................................................................. 31
致谢.......................................................................................................................................................................... 31
信息安全是一个综合性的交叉学科领域,广泛涉及数学、密码学、计算机、通信、控制、人工智能、安全工程、人文科学等诸多学科,是近几年迅速发展的一个热点学科领域。信息对抗和网络安全是信息安全的核心热点,它的研究和发展又将刺激、推动和促进相关学科的研究与发展。至今,密码技术是取得信息安全性最有效的一种方法, 密码技术是信息安全的核心技术。[1]
通过数据加密,人们可以有效地保证通信线路上的内容不被泄露,而且还可以检验传送信息的完整性。进一步,密码技术可以应用于数字签名、身份认证和信息鉴定,这些应用对于资源存取控制以及其它安全措施是必须而且有效的。信息安全产品从应用类型上可以分为防火墙类产品、防病毒类产品、防攻击类产品、密码类产品、认证类产品和访问控制类产品。相对于防病毒软件和防火墙软件来说,基于密码技术密码类产品、认证类产品份额相对较小,但随着金融、电信、政府等行业信息化建设对于网络安全整体解决方案需求的增加,将会有较大的增长。
在本次毕业设计中,对公钥密码体制和私钥密码体制进行了分析和研究,并对公钥密码体制和私钥密码体制的代表RSA算法和DES算法进行了研究和比较。并且实现了基本的文件加密解密的处理流程,能提供对文件的安全、有效的保护。
信息是一种资源,也是一种财富。在现代社会中,信息处理和通信技术日益发展,保护信息的安全,特别是保护重要信息的安全,越来越成受到国内外有关研究人员的极大重视。当前由于信息的保护不利和失误,世界各国遭受的损失是巨大的。现在,国际互联网上的各站点,几乎都有各种各样的安全措施,例如防火墙(FireWall)、网络加密、加密狗等。但是,这些都是系统或网站层次的安全设施。对于广大用户来说,更为直接、也更为有效的办法,就是使用信息加密技术。加密技术是一门实用的技术,有着悠久的历史。过去,加密技术仅被军事和谋报人员以及某些大型商业企业所采用,应用范围十分有限。加密学也是一门与数学有关的深奥的科学,有能力研究加密学的人为数不多。恐怕这也是它鲜为人知、较少应用的原因。信息安全的内容主要包括五个部分:信息的保密性、信息的完整性、信息的可用性、信息的可控性、信息的不可否认性。密码技术是保证信息安全的核心。
认证过程中,用户必须向系统提供能够证明自己身份的信息,证明用户身份的信息种类很多,可以是用户所知道的秘密(口令),也可以是生物特征(如指纹)等,但目前使用最广泛的仍然是用户口令(password)。在认证系统中口令占据了非常重要的地位,因此对口令的保护就变得至关重要。人们提出了许多保护口令的方法,力图保障口令的安全与秘密。这些保护认证信息的方法以及认证系统是随着密码学的发展一起发展的,密码学为我们提供了保护口令的一个重要方向。归根结底,用户用以证明自己身份的是一段信息,不论它是口令还是指纹。而迄今为止,确保信息安全的最重要手段是加密。对信息的加密、解密、信息的保密传输,这正是密码学研究的内容。
密码学泛指一切有关研究密码通信的学问,其中包括下面两个领域:如何达成秘密通信,以及如何破译秘密通信。也就是密码编码学:指如何达到信息的秘密性,鉴别性的科学;密码分析学:泛指如何破解密码系统,或伪造信息使密码系统误以为真的科学。从密码学的发展来看,它经历了传统(古典)密码学、近代密码学、现代密码学几个阶段,计算机、数学领域的最新成果往往与密码学有关或被应用于密码学研究中。
传统密码学、近代密码学的发展
密码学拥有悠久、丰富多彩的历史。作为古典密码其中的一种,早期出现的密写术形式只需要纸和笔就可以完成。古典密码学的两大范畴是将消息内容进行重新排列的位移密码和系统地将字母进行替换的替换密码。古典密码学会透露出与明文统计学结果相关的大量信息,因此容易被破解,如对频率分析可以有效地攻击古典密码。尽管保密强度很低,由于实现难度低,加密解密快,古典密码至今仍然被广泛使用。在古典密码学中,有四种类型的代替密码:
(1)简单代替密码,或单字母密码:就是明文的一个字符用相应的一个密文字符代替。Caesar 密码就是典型的简单替代密码。
(2)多编码代替密码:它与简单代替密码系统相似,唯一的不同是单个字符明文可以映射成密文的几个字符之一,例如 A 可能对应于5、13、25 或 56,“B”可能对应于 7、19、31 或 42,等等。
(3)字母代替密码:字符块被成组加密,例如“ABA”可能对应于“RTQ”,ABB 可能对应于“SLL”等。
(4)多表代替密码:由多个简单的代替密码构成,例如,可能有 5 个被使用的不同的简单代替密码,单独的一个字符用来改变明文的每个字符的位置。
20 世纪初,包括转轮机在内的一些机械密码加密装置被发明出来,其中最有名的是二次世界大战中德国使用的恩尼格码(Enigma)机。由这些装置实现的密码显著提高了密码分析的复杂程度,大量的攻击也仅仅取得了有限的结果。
古典密码学以移位密码、替换密码、转轮机为代表,以替代和置换为基础的密码系统在今天看来已经不堪一击,无法保证信息的安全,对处心积虑的攻击者来说形同虚设,因为已经有成熟的分析方法来破解这一类的加密方法。
借助电子计算机的发展,人们可以实现更复杂的密码系统。与古典密码和机械密码对 26 个字母进行操作不同,计算机密码的一个显著特征是对二进制串进行操作。计算机密码对密码分析有更强的抵抗力,只有少数情况下唯密文攻击才会生效。
密码学的大发展时期是上世纪 70 年代,以 DES 和 RSA 算法的提出为代表。一系列的突破创立了新的密码学体系。DES 是对称密钥分组密码的一个典型代表,美国国家标准局于 1977 年公布了由 IBM 公司研制的一种加密算法,批准把它作为非机要部门使用的数据加密标准.简称 DES,DES 是 Data Encryption Standard 的缩写。自从公布以来,它一直广泛用于国际上商用保密通信和计算机通信。但由于弱密钥的问题和新的攻击手段不断出现(差分攻击、线性攻击),单纯的 DES 加密已经很少用于实际。更多的情况下是采用增加密钥长度和多重 DES 加密的办法。
RSA 作为一种成功的公钥密码系统,与传统的对称密码系统(加密、解密使用相同的密钥)相比,最大的特点就是解决了大量密钥分配、传输的问题。在公钥密码系统中,每个通信者拥有一个密钥对,可用其中一个来加密,用另一个来解密,公开其中之一(公钥)而另一半只有自己知道(私钥)。当需要向某人发送信息时,只需要用他的公开密钥对消息进行加密,接收者再用自己的私钥解密即可。而由于公钥密码的特性,这种密码系统也可以用于数字签名。与对称密码一样,公钥密码也容易受到攻击,解决方法是增加密钥长度,但密钥长度的增长会使得加密、解密速度变慢,所以公钥密码目前主要仅用于密钥管理和签名中。
近代密码学的另一个分支是序列密码,这种密码体制采用与明文长度相同的密钥,利用模加(异或)的方法来掩盖明文的内容。这种加密方法虽然简单,但在使用一次性密钥的情况下,可获得极高的安全性,由于密钥不重复使用,给破译带来了极大的困难。但这种方法也有其缺点,由于密钥只使用一次,不适合对大量数据进行加密,尤其是流媒体数据,而且大量密钥的分发、传送也是一个问题。这种方法安全性的关键是要保证密钥序列的随机性,然而“真”随机数是不容易通过固定算法来产生的,而使用“伪随机数”则存在着一定的风险。
近年来提出的“量子密码”采用了量子状态来传递信息。“海森堡测不准原理”是量子力学的基本原理,它表明,在同一时刻以相同的精度测定量子的位置与动量是不可能的,只能精确测定两者之一。“单量子不可复制定理”是“海森堡测不准原理”的推论,它表明,在不知道量子状态的情况下复制单个量子是不可能的,因为要复制单个量子就只能先作测量,而测量必然改变量子的状态,所以说不可能。这样使用量子状态作为“一次性便签”可以达到无条件保密。因为如果量子在传输中被测量,其状态就会改变,从而在传输中监听者会因此而暴露。虽然量子密码拥有优秀的安全特性,但目前仍处于研究阶段。
就整体而言,计算机网络加密问题应包括文件存储加密、口令存储加密、数据库数据加密、电子邮件加密等信息加密和数据传输加密(信道加密)以及密码体制、密钥管理中心等三个方面的内容,下面我们通过加密原理、密码体制和产品功能介绍来概略地讲讲这三个方面的内容:
(1)密码原理。所谓加密,就是将正常情况下可懂的文件数据输入密码机,由密码机变成不可懂的乱码,即将“明文”变成“密文”;所谓解密,就是上述过程的逆过程,即将“密文” 变成“明文”。密码机可看做是一个用电子元件实现一种复杂数学运算的机器。复杂数学运算可记为,这里C=密文,p=明文,k=密钥,f是密码算法。K是自变量,C是因变量。不同的K有不同的C,对于某个密码算法f,K的选择范围越大,C的变化就越多,这个密码算法被人破译的难度就越大,保密强度就越高。如何评价K的选择范围大小呢?一般是看K的位数,位数长的(如128位以上)选择范围大,位数短的(如56位)选择范围小。一个国家的密码政策,通常是用位数长的高强度密码(位数可达)保护国家秘密,其它用于保护商业秘密。
在数据传输加密过程中,收发双方线路密码机使用的是相同的密码算法,注入了相同的密钥,发方向收方发出明文,经密码机变成密文后送上公网通信线路,到达收方后先经密码机解密再送到收方电脑上。密文在公用通信网上传输时,如果被截收,窃密方收到的是不可懂的乱码,无法窃取信息内容。
在文件存储加密中,加密解密卡加解密采用同一种算法和同一个密钥,工作人员用电脑处理文件后先将文件加密再存入磁盘,以防窃密者盗用磁盘窃取文件。工作人员调用该文件时,文件先经解密再从显示器上显示出来以供使用。
(2)密码体制。刚才讲密码原理时,收发双方密码机的密码算法一致、密钥一致,这在密码体制中叫“秘密密钥体制”或“单密钥体制”,这是一种传统的密码体制,有系统的理论研究和完善的管理机制,技术成熟,性能稳定,国内自行研制的产品安全可靠、保密强度高,一般用于文件数据加密存储和传输。国外著名的DES密码就是美国政府1977年发布的密钥长度为56位的“秘密密钥体制”的密码。这种密码的缺陷是:仅适用于内部的,点对点方式的,事前双方已知密钥的两点之间的加密传输,保守密钥的秘密十分重要,密钥一旦丢失,整个系统都要立即更换密钥,否则窃密者将可能轻而易举的破解密文。
随着近代计算机网络的发展,不同部门、不同单位网上交往增多,“单密钥体制”显出了它的局限性,人们很难对众多的部门和单位保管好各自不同的密钥。于是人们又发明了“公开密钥体制”或叫“双密钥体制”。它是基于一些数学问题而发明出来的密码体制,这些数学问题可记为,其中,写在一起就是,这个公式说明有这样一种数学运算,它可以将用密钥k加密的密文用密钥k’解密,国外1978年公布的RSA密码就是这种有两个密钥的密码。这种密码保密强度不如单密钥体制的密码,一般用于通信双方的身份确认和数字签名。
在实用的互联网络中,各用户通过加密传输可形成一个虚拟的保密互联网。该网要由一个各用户认可的密钥管理中心来生成、管理、分发和销毁密钥,同时各用户可将自己的“公钥”也存放在密钥管理中心。各用户需进行保密通信时,先通过公钥系统进行身份确认(这个过程中密钥管理中心可起到仲裁鉴别作用),双方确认身份后由密钥管理中心分发秘密密钥,双方用得到秘密密钥进行数据或文件的加密传输。这种工作方式不但适用于党政机关内部,也同样适用于电子商务,但电子商务和党政机关不能使用同一个级别的密码设备,党政机关用的是“普密”设备,电子商务只能用“商密”设备,二者的保密强度是不一样的。
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算法得到了广泛的应用,在某些场合,仍然发挥着余热。
当前最著名、应用最广泛的公钥系统RSA是在1978年,由美国麻省理工学院(MIT)的Ron Rivest, Adi Shamir 和Leonard Adleman在题为《获得数字签名和公开钥密码系统的方法》的论文中提出的。它是一个基于数论的非对称(公开钥)密码体制,是一种分组密码体制。其名称来自于三个发明者的姓名首字母。它的安全性是基于大整数素因子分解的困难性,而大整数因子分解问题是数学上的著名难题,至今没有有效的方法予以解决,因此可以确保RSA算法的安全性。RSA系统是公钥系统的最具有典型意义的方法,大多数使用公钥密码进行加密和数字签名的产品和标准使用的都是RSA算法。
RSA算法是第一个既能用于数据加密也能用于数字签名的算法,因此它为公用网络上信息的加密和鉴别提供了一种基本的方法。它通常是先生成一对RSA 密钥,其中之一是保密密钥,由用户保存;另一个为公开密钥,可对外公开,甚至可在网络服务器中注册,人们用公钥加密文件发送给个人,个人就可以用私钥解密接受。为提高保密强度,RSA密钥至少为500位长,一般推荐使用1024位。
该算法基于下面的两个事实,这些事实保证了RSA算法的安全有效性:
1.已有确定一个数是不是质数的快速算法;
2. 尚未找到确定一个合数的质因子的快速算法。
1) 任意选取两个不同的大质数p和q,计算乘积r=p*q;
2) 任意选取一个大整数e,e与(p-1)*(q-1)互质,整数e用做加密密钥。注意:e的选取是很容易的,例如,所有大于p和q的质数都可用。
3) 确定解密密钥d: d * e = 1 modulo(p - 1)*(q - 1)根据e、p和q可以容易地计算出d。
4) 公开整数r和e,但是不公开d;
5) 将明文P (假设P是一个小于r的整数)加密为密文C,计算方法为:
C = Pe modulo r
6) 将密文C解密为明文P,计算方法为:
P = Cd modulo r
然而只根据r和e(不是p和q)要计算出d是不可能的。因此,任何人都可对明文进行加密,但只有授权用户(知道d)才可对密文解密。
数学原理
定理
若 p, q 是相异质数, rm == 1 mod(p-1)(q-1),
a 是任意一个正整数, b == a^m mod pq, c == b^r mod pq,
则 c == a mod pq
证明的过程, 会用到费马小定理, 叙述如下:
m 是任一质数, n 是任一整数, 则 n^m == n mod m
(换另一句话说, 如果 n 和 m 互质, 则 n^(m-1) ==1 mod m)
运用一些基本的群论的知识, 就可以很容易地证出费马小定理的........
证明
因为 rm == 1 mod (p-1)(q-1), 所以rm = k(p-1)(q-1) + 1, 其中 k 是整数
因为在 modulo 中是 preserve 乘法的
(x == y mod z and u == v mod z => xu == yv mod z),
所以, c == b^r == (a^m)^r == a^(rm) == a^(k(p-1)(q-1)+1)mod pq
1. 如果 a 不是 p 的倍数, 也不是 q 的倍数时,
则 a^(p-1) == 1 mod p (费马小定理) => a^(k(p-1)(q-1)) == 1 mod p
a^(q-1) == 1 mod q (费马小定理) => a^(k(p-1)(q-1)) == 1 mod q
所以 p, q 均能整除a^(k(p-1)(q-1)) - 1 => pq | a^(k(p-1)(q-1)) - 1
即 a^(k(p-1)(q-1)) == 1 mod pq
=> c == a^(k(p-1)(q-1)+1) == a mod pq
2. 如果 a 是 p 的倍数, 但不是 q 的倍数时,
则 a^(q-1) == 1 mod q (费马小定理)
=> a^(k(p-1)(q-1)) == 1 mod q
=> c == a^(k(p-1)(q-1)+1) == a mod q
=> q | c - a
因 p | a
=> c == a^(k(p-1)(q-1)+1) == 0 mod p
=> p | c - a
所以, pq | c - a => c == a mod pq
3. 如果 a 是 q 的倍数, 但不是 p 的倍数时, 证明同上
4. 如果 a 同时是 p 和 q 的倍数时,
则 pq | a
=> c == a^(k(p-1)(q-1)+1) == 0 mod pq
=> pq | c - a
=> c == a mod pq
Q.E.D.
这个定理说明 a 经过编码为 b 再经过解码为 c 时, a == c mod n (n = pq)....
但我们在做编码解码时, 限制 0 <= a
为了说明该算法的工作过程,我们下面给出一个简单例子,显然我们在这只能取很小的数字,但是如上所述,为了保证安全,在实际应用上我们所用的数字要大的多得多。
例:选取p=3, q=5,则r=15,(p-1)*(q-1)=8。选取e=11(大于p和q的质数),通过d * 11 = 1 modulo 8,计算出d =3。
假定明文为整数13。则密文C为
C = Pe modulo r
= 1311 modulo 15
= 1,792,160,394,037 modulo 15
= 7
复原明文P为:
P = Cd modulo r
= 73 modulo 15
= 343 modulo 15
= 13
因为e和d互逆,公开密钥加密方法也允许采用这样的方式对加密信息进行"签名",以便接收方能确定签名不是伪造的。
两个在不安全信道中通信的人,假设为Alice(收信者)和Bob(发信者),他们希望能够安全的通信而不被他们的敌手Oscar破坏。Alice 想到了一种办法,她使用了一种锁(相当于公钥),这种锁任何人只要轻轻一按就可以锁上,但是只有Alice的钥匙(相当于私钥)才能够打开。然后 Alice 对外发送无数把这样的锁,任何人比如Bob想给她寄信时,只需找到一个箱子,然后用一把Alice的锁将其锁上再寄给Alice,这时候任何人(包括 Bob自己)除了拥有钥匙的Alice,都不能再打开箱子,这样即使Oscar能找到Alice的锁,即使Oscar能在通信过程中截获这个箱子,没有 Alice的钥匙他也不可能打开箱子,而Alice的钥匙并不需要分发,这样 Oscar也就无法得到这把“私人密钥”。
RSA算法是第一个能同时用于加密和数字签名的算法,也易于理解和操作。RSA是被研究得最广泛的公钥算法,从提出到现在已近二十年,经历了各种攻击的考验,逐渐为人们接受,普遍认为是目前最优秀的公钥方案之一。该算法的加密密钥和加密算法分开,使得密钥分配更为方便。它特别符合计算机网络环境。对于网上的大量用户,可以将加密密钥用电话簿的方式印出。如果某用户想与另一用户进行保密通信,只需从公钥簿上查出对方的加密密钥,用它对所传送的信息加密发出即可。对方收到信息后,用仅为自己所知的解密密钥将信息脱密,了解报文的内容。由此可看出,RSA算法解决了大量网络用户密钥管理的难题,这是公钥密码系统相对于对称密码系统最突出的优点。
缺点:
1)产生密钥很麻烦,受到素数产生技术的限制,因而难以做到一次一密。
2)安全性, RSA的安全性依赖于大数的因子分解,但并没有从理论上证明破译RSA的难度与大数分解难度等价,而且密码学界多数人士倾向于因子分解不是NPC问题。目前,人们已能分解140多个十进制位的大素数,这就要求使用更长的密钥,速度更慢;另外,目前人们正在积极寻找攻击RSA的方法,如选择密文攻击,一般攻击者是将某一信息作一下伪装(Blind),让拥有私钥的实体签署。然后,经过计算就可得到它所想要的信息。实际上,攻击利用的都是同一个弱点,即存在这样一个事实:乘幂保留了输入的乘法结构:
( XM )d = Xd *Md mod n
前面已经提到,这个固有的问题来自于公钥密码系统的最有用的特征--每个人都能使用公钥。但从算法上无法解决这一问题,主要措施有两条:一条是采用好的公钥协议,保证工作过程中实体不对其他实体任意产生的信息解密,不对自己一无所知的信息签名;另一条是决不对陌生人送来的随机文档签名,签名时首先使用One-Way Hash Function对文档作HASH处理,或同时使用不同的签名算法。除了利用公共模数,人们还尝试一些利用解密指数或φ(n)等等攻击.
3)速度太慢,由于RSA 的分组长度太大,为保证安全性,n 至少也要 600 bitx以上,使运算代价很高,尤其是速度较慢,较对称密码算法慢几个数量级;且随着大数分解技术的发展,这个长度还在增加,不利于数据格式的标准化。目前,SET(Secure Electronic Transaction)协议中要求CA采用2048比特长的密钥,其他实体使用1024比特的密钥。为了速度问题,目前人们广泛使用单,公钥密码结合使用的方法,优缺点互补:单钥密码加密速度快,人们用它来加密较长的文件,然后用RSA来给文件密钥加密,极好的解决了单钥密码的密钥分发问题。
公钥加密算法中使用最广的是RSA。RSA算法研制的最初理念与目标是努力使互联网安全可靠,旨在解决DES算法秘密密钥的利用公开信道传输分发的难题。而实际结果不但很好地解决了这个难题;还可利用RSA来完成对电文的数字签名以抗对电文的否认与抵赖;同时还可以利用数字签名较容易地发现攻击者对电文的非法篡改,以保护数据信息的完整性。目前为止,很多种加密技术采用了RSA算法,该算法也已经在互联网的许多方面得以广泛应用,包括在安全接口层(SSL)标准(该标准是网络浏览器建立安全的互联网连接时必须用到的)方面的应用。此外,RSA加密系统还可应用于智能IC卡和网络安全产品。
但目前RSA算法的专利期限即将结束,取而代之的是基于椭圆曲线的密码方案(ECC算法)。较之于RSA算法,ECC有其相对优点,这使得ECC的特性更适合当今电子商务需要快速反应的发展潮流。此外,一种全新的量子密码也正在发展中。
1-1、变换密钥
1-2、变换密钥。
1-2-1、舍弃64位密钥中的奇偶校验位,根据下表(PC-1)进行密钥变换得到56位的密钥,在变换中,奇偶校验位以被舍弃。
Permuted Choice 1 (PC-1)
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
1-2-2、将变换后的密钥分为两个部分,开始的28位称为C[0],最后的28位称为D[0]。
1-2-3、生成16个子密钥,初始I=1。
1-2-3-1、同时将C[I]、D[I]左移1位或2位,根据I值决定左移的位数。见下表
I: 1 2 3 4 5 6 7 8 9 10 1112 13 14 15 16
左移位数: 1 1 2 2 2 2 2 2 1 2 2 22 2 2 1
1-2-3-2、将C[I]D[I]作为一个整体按下表(PC-2)变换,得到48位的K[I]
Permuted Choice 2 (PC-2)
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
1-2-3-3、从1-2-3-1处循环执行,直到K[16]被计算完成。
2-1、取得64位的数据,如果数据长度不足64位,应该将其扩展为64位(例如补零)
2-2、将64位数据按下表变换(IP)
Initial Permutation (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
2-3、将变换后的数据分为两部分,开始的32位称为L[0],最后的32位称为R[0]。
2-4、用16个子密钥加密数据,初始I=1。
2-4-1、将32位的R[I-1]按下表(E)扩展为48位的E[I-1]
Expansion (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
2-4-2、异或E[I-1]和K[I],即E[I-1] XOR K[I]
2-4-3、将异或后的结果分为8个6位长的部分,第1位到第6位称为B[1],第7位到第12位称为B[2],依此类推,第43位到第48位称为B[8]。
2-4-4、按S表变换所有的B[J],初始J=1。所有在S表的值都被当作4位长度处理。
2-4-4-1、将B[J]的第1位和第6位组合为一个2位长度的变量M,M作为在S[J]中的行号。
2-4-4-2、将B[J]的第2位到第5位组合,作为一个4位长度的变量N,N作为在S[J]中的列号。
2-4-4-3、用S[J][M][N]来取代B[J]。
Substitution Box 1 (S[1])
14 4 13 1 2 15 11 8 3 106 12 5 9 0 7
0 15 7 4 14 2 13 1 10 612 11 9 5 3 8
4 1 14 8 13 6 2 11 15 129 7 3 10 5 0
15 12 8 2 4 9 1 7 5 11 314 10 0 6 13
S[2]
15 1 8 14 6 11 3 4 9 7 213 12 0 5 10
3 13 4 7 15 2 8 14 12 0 110 6 9 11 5
0 14 7 11 10 4 13 1 5 812 6 9 3 2 15
13 8 10 1 3 15 4 2 11 6 712 0 5 14 9
S[3]
10 0 9 14 6 3 15 5 1 1312 7 11 4 2 8
13 7 0 9 3 4 6 10 2 8 514 12 11 15 1
13 6 4 9 8 15 3 0 11 1 212 5 10 14 7
1 10 13 0 6 9 8 7 4 15 143 11 5 2 12
S[4]
7 13 14 3 0 6 9 10 1 2 85 11 12 4 15
13 8 11 5 6 15 0 3 4 7 212 1 10 14 9
10 6 9 0 12 11 7 13 15 13 14 5 2 8 4
3 15 0 6 10 1 13 8 9 4 511 12 7 2 14
S[5]
2 12 4 1 7 10 11 6 8 5 315 13 0 14 9
14 11 2 12 4 7 13 1 5 015 10 3 9 8 6
4 2 1 11 10 13 7 8 15 912 5 6 3 0 14
11 8 12 7 1 14 2 13 6 150 9 10 4 5 3
S[6]
12 1 10 15 9 2 6 8 0 13 34 14 7 5 11
10 15 4 2 7 12 9 5 6 1 1314 0 11 3 8
9 14 15 5 2 8 12 3 7 0 410 1 13 11 6
4 3 2 12 9 5 15 10 11 141 7 6 0 8 13
S[7]
4 11 2 14 15 0 8 13 3 129 7 5 10 6 1
13 0 11 7 4 9 1 10 14 3 512 2 15 8 6
1 4 11 13 12 3 7 14 10 156 8 0 5 9 2
6 11 13 8 1 4 10 7 9 5 015 14 2 3 12
S[8]
13 2 8 4 6 15 11 1 10 9 314 5 0 12 7
1 15 13 8 10 3 7 4 12 5 611 0 14 9 2
7 11 4 1 9 12 14 2 0 6 1013 15 3 5 8
2 1 14 7 4 10 8 13 15 129 0 3 5 6 11
2-4-4-4、从2-4-4-1处循环执行,直到B[8]被替代完成。
2-4-4-5、将B[1]到B[8]组合,按下表(P)变换,得到P。
Permutation P
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
2-4-6、异或P和L[I-1]结果放在R[I],即R[I]=P XOR L[I-1]。
2-4-7、L[I]=R[I-1]
2-4-8、从2-4-1处开始循环执行,直到K[16]被变换完成。
2-4-5、组合变换后的R[16]L[16](注意:R作为开始的32位),按下表(IP-1)变换得到最后的结果。
Final Permutation(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
以上就是DES算法的描述。
这是DES TOOL 的截图,MFC写的,编译器是VS 2008
#ifndef yxyDESH
#define yxyDESH
#include
#include
#include
#include
using namespace std;
class yxyDES
{
public:
yxyDES(); //
~yxyDES(); //类析构函数
void InitializeKey(string);
//功能:产生16个28位的key
//参数:源8位的字符串(key)
//结果:函数将调用private CreateSubKey将结果存于charSubKeys[16][48]
void EncryptData(string);
//功能:加密8位字符串
//参数:8位字符串
//结果:函数将加密后结果存放于private szCiphertext[16]
// 用户通过属性Ciphertext得到
void DecryptData(string );
//功能:解密16位十六进制字符串
//参数:16位十六进制字符串
//结果:函数将解密候结果存放于private szPlaintext[8]
// 用户通过属性Plaintext得到
void EncryptAnyLength(string);
//功能:加密任意长度字符串
//参数:任意长度字符串
//结果:函数将加密后结果存放于private szFCiphertextAnyLength[8192]
// 用户通过属性CiphertextAnyLength得到
void DecryptAnyLength(string);
//功能:解密任意长度十六进制字符串
//参数:任意长度字符串
//结果:函数将加密后结果存放于private szFPlaintextAnyLength[4096]
// 用户通过属性PlaintextAnyLength得到
void SetCiphertext(char* value);
//Ciphertext的set函数
char* GetCiphertext();
//Ciphertext的get函数
void SetPlaintext(char* value);
//Plaintext的set函数
char* GetPlaintext();
//Plaintext的get函数
char* GetCiphertextAnyLength();
//CiphertextAnyLength的get函数
char* GetPlaintextAnyLength();
//PlaintextAnyLength的get函数
private:
char SubKeys[16][48];//储存16组48位密钥
char szCiphertext[16];//储存16位密文(十六进制字符串)
char szPlaintext[8];//储存8位明文字符串
char szFCiphertextAnyLength[8192];//任意长度密文(十六进制字符串)
char szFPlaintextAnyLength[4096];//任意长度明文字符串
void CreateSubKey(char*);
//功能:生成子密钥
//参数:经过PC1变换的56位二进制字符串
//结果:将保存于char SubKeys[16][48]
void FunctionF(char*,char*,int);
//功能:DES中的F函数,
//参数:左32位,右32位,key序号(0-15)
//结果:均在变换左右32位
void InitialPermuteData(string,char*,bool);
//功能:IP变换
//参数:待处理字符串,处理后结果存放指针,加密/解密(true加密,false解密)
//结果:函数改变第二个参数的内容
void ExpansionR(char* ,char*);
//功能:将右32位进行扩展位48位,
//参数:原32位字符串,扩展后结果存放指针
//结果:函数改变第二个参数的内容
void XOR(char* ,char* ,int ,char*);
//功能:异或函数,
//参数:待异或的操作字符串1,字符串2,操作数长度,处理后结果存放指针
//结果: 函数改变第四个参数的内容
string CompressFuncS(char* );
//功能:S-BOX ,数据压缩,
//参数:48位二进制字符串,
//结果:返回结果:32位字符串
void PermutationP(string ,char*);
//功能:IP逆变换,
//参数:待变换字符串,处理后结果存放指针
//结果:函数改变第二个参数的内容
string FillToEightBits(string);
//功能:当明文不足8位,使用'$'进行填充,
//参数:原始字符串,
//结果:返回8位字符串
void CleanPlaintextMark(int);
//将不足8位而补齐的明文处理还原
//函数将处理szFPlaintextAnyLength
//结果: 例如123$$$$$ 处理后将变为 123'\0'
string HexCharToBinary(char);
//功能:16进制字符('0'-'F')到2进制字符串的转换
//参数:十六进制字符('0'-'F')
//结果:返回二进制字符串("0000"-"1111")
string HexIntToBinary(int );
//功能:16进制整数(0-15)到2进制字符串的转换
//参数:十六进制整数(0-15)
//结果:返回二进制字符串("0000"-"1111")
string BinaryToString(char*,int,bool);
//功能:二进制串到字符串的转换,
//参数:源二进制字符串,二进制字符串长度,类型(true为二进制到hex,false为二进制到ANSCII char),
//结果:返回处理后结果
int SingleCharToBinary(char);
//功能:单个char '0'或'1' 到int 0或1的变换
//参数: '0'或'1'
//结果:0或1
char SingleBinaryToChar(int);
//功能:将int类型的0或1转换为char类型的0或1
//参数:0或1
//返回:'0'或'1'
};
#endif
经过不断的测试与修改,该程序算法实现步骤是 Matthew Fischer 的 des-how-to实现,程序已经可以很好的满足用户的要求,所预计的各功能都能实现,比如说:
1.本程序可以加密1-4096个字符的任意长度字符串
2.如果密钥长度过短或者为空,程序将使用默认密钥进行加密.
3.加密结果将用16进制字符显示
4.本加密程序同时支持中/英文字符(包括密钥和明文)
5.本加密程序支持特殊字符[例如换行符(回车键)]
经过几个星期的设计和开发,系统基本开发完毕。在本次课程设计中困难遇到不少,比如如何如何实现用树视控件实现子项的展开和合拢,使得用户方便快捷的找到文件所在位置;如何使用列表视控件实现文件的不同显示风格等,由于设计时间较短,所以该系统还有许多不尽如人意的地方,如出错处理不够完善等多方面问题。在这次系统开发的过程中,我深深体会到了做一个系统,首先进行需求分析的重要性,了解了一个系统的制作,从功能分析到功能模块分析、与其他系统的关系,这些都有待以后进一步改进。通过实践对于我以后的学习是一笔不小的财富!
[1] 《加密解密技能百练丛书》出 版 社 (中国铁道出版社)书号(71130585)
岁月如梭,2年匆匆而过,不知不觉已经走到了最后的路口。相对于2年前那些迷茫的眼神,现在的我有着更多的坚强与理智,而带给我这些巨大变化的正式我们辛勤耕耘的老师们。“云山苍苍,江水泱泱,先生之风,山高水长。”
回首我2年的求学历程,无一不有着老师们的心血,无论是起步的《计算机文化基础》,严谨的《高等数学》,还是更深一层的《数据库》、《C语言》、《VB》,再到后来的《操作系统》,《计算机辅助教学》,老师们无一不在用自己的臂膀托起我们明天的希望,他们毫不保留的奉献自己全部的知识与精力,对我们襟怀无私、谆谆教诲,倾心吐露,唯恐不尽。而同时,他们也用自己的行动和人格的力量,教会我们做人的道理,指引我们前进的方向。时间总是飞逝而过,现在的我们即将离开老师的庇护,带着老师对我们的殷切希望走向自己的工作岗位,去打拼属于自己的一片天空。但是先生之风,定会永远作为我们行动的指南,陪伴激励我们向着更高、更快、更强的目标奋斗。
本论文是在我的导师杨帆老师的悉心指导下完成的,杨帆老师学识渊博,勤奋好学,工作严谨,待人诚恳,令我十分敬佩。我从杨帆老师的身上学到的不仅是先进的计算机方面的专业知识,他的优秀的俄学习和工作作风、严谨的科学态度以及高尚的品质更使我受益匪浅。作为杨帆带的毕业设计学生,我很高兴,真的。