《利用汇编语言实现DES加密算法(共20页).doc》由会员分享,可在线阅读,更多相关《利用汇编语言实现DES加密算法(共20页).doc(20页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上摘 要在现代社会,不管是日常生活、商业运营、以及军事作战指挥,加密技术越发凸显其重要性。由于计算机技术以及网络技术的快速发展,大量的信息需要通过网络传输,这给目前常用的加密技术带来了新的挑战。 DES(Data Encryption Standard)算法是一种数据加密算法。自从1977年公布以来,一直是国际上的商用保密通信和机通信的最常用的加密标准。在界及非金融界的保密通信中,越来越多地用到了DES算法。随着现在金卡工程的启动,DES算法在POS、ATM、磁卡及智能卡(IC卡)中被广泛,以此来实现关键数据的保密。如信用卡持卡人的PIN的加密传输、IC卡与POS间的双
2、向认证、金融交易中的密码键盘等,均用到DES算法。汇编语言(Assembly Language)是面向机器的程序设计语言。在汇编语言中,用助记符(Memoni)代替操作码,用地址符号(Symbol)或标号(Label)代替地址码。这样用符号代替机器语盲的二进制码,就把机器语音变成了汇编语言。于是汇编语言亦称为符号语言。使用汇编语言编写的程序,机器个能直接识别,要由一种程序将汇编语言翻译成机器语言,这种起翻译作用的程序叫汇编程序,汇编程序是系统软件中语言处理系统软件。汇编语言把汇编程序翻译成机器语言的过程称为f汇编。汇编语言比机器语言易于读写、易于调试和修改,同时也具有机器语言执行速度快,占内存
3、空间少等优点,但在编写复杂程序时具有明显的局限性,汇编语言依赖于具体的机型,不能通用,也不能在不同机型之间移植。关键词:加密算法 DES 汇编语言英文摘要(English abstract) In modern society, no matter is the daily life, the commercial operation, as well as the military operational control, the encryption technology even more highlights its importance. As a result of the com
4、puter technology as well as networkings fast development, the massive information needed through the network transmission, this to bring the new challenge for the present commonly used encryption technology. DES (Data Encryption Standard) the algorithm is one kind of data encryption algorithm. Has a
5、nnounced since 1977, has been the commercial privacy communication internationally and machine the correspondence most commonly used encryption standard. In and in the non-financial circles privacy communication, more and more used the DES algorithm. Along with present gold card project start, DES a
6、lgorithm in POS, ATM, magcard and smart card (IC card) widespread, realizes the essential data security by this. If the credit card cardholders PIN encryption transmission the IC card and in the POS bidirectional authentication, the financial transactions password keyboard and so on, uses the DES al
7、gorithm. The assembly language (Assembly Language) faces machines programming language. In the assembly language, replaces the operation code with mnemonic symbol (Memoni), replaces the address with address mark (Symbol) or marking (Label). Like this uses the mark to replace the machine language bli
8、nd binary code, turned the machine talk the assembly language. Therefore the assembly language is also called the symbolic language. The use assembly language compilations procedure, machine can distinguish directly, must the assembly language translate the machine language by one kind of procedure,
9、 this kind of translation functions procedure is called the assembly program, the assembly program is in the system software the language processing system software. The assembly language translates the assembly program the machine language the process to be called the f assembly. The assembly langu
10、age compared to the machine language easy read-write, easy to debug and the revision, simultaneously also has the machine language to carry out the speed to be quick, occupies the memory space few and so on merits, but in compilation complex procedure time has the obvious limitation, the assembly la
11、nguage relies on the concrete type, cannot use in common, also cannot transplant between the different type. key word: Encryption algorithm DES Assembly language专心-专注-专业目 录一、绪论(一)本文的研究目的:数据加密技术已随着计算机技术的迅猛发展,由早期的军事和外交领域,逐步伸展到交通,工业经济,科学技术,社会安全和公共生活的各个领域,成为现代社会中保护信息的重要手段和工具。信息保护的现实需要,使得数据加密算法和技术迅速进入了现代
12、社会,了解并有效使用数据加密算法技术已成为计算机技术和通信领域的专业技术人员和广大用户的迫切需求,这是信息化社会发展阶段的重要标志。(二)本文研究的内容:本文主要研究的是利用汇编语言实现DES加密算法。首先对DES加密算法进行分析,为了利用汇编实现DES加密算法还需要对汇编语言进行分析。DES算法是一种分组密码,通过反复使用加密组块替代和换位两种技术,经过16轮的变换后得到密文;汇编语言具有汇编的位操作可以方便地实现置换功能的优势。8031有16个可以位寻址的寄存器,可放置128位的数据,利用它可实现DES的转置功能。将明文m放入寄存器27H20H中,即位地址00H对应m64 ,3FH对应m1
13、。利用标志寄存器C可实现置换与逆置换程序。(三) 本文的研究意义:在计算机密码体制中,研究并建立一种公开加密算法密码体制是一项紧迫而又难度非常大的课题,其根本原因在于公开加密算法对用户和攻击都是公开的,要求用户使用方便而攻击者破译要难,这本身就是矛盾。在研究和建立一种新的计算机密码体制之前,密码体制设计者必须清醒的认识到:攻击者的巨大挑战和能力,即密码体制面临强大的对手,任何低估攻击者的思想都是错误的和危险的,都将导致严重的后果或失败。二、DES加密算法的概述(一)DES加密算法的定义:DES算法是一种分组密码,通过反复使用加密组块替代和换位两种技术,经过16轮的变换后得到密文,安全性很高。D
14、ES属于传统的对称密码体制,其加密密钥与解密密钥是相同的,由于其安全性高,计算较简单,所以一度攻获得广泛使用。(二)DES加密算法的优缺点:1 DES算法的优点:适用于一对一的信息交换,加密速度快。2 DES算法的缺点: 密钥 的传递和管理困难,不适用于大量用户的情况,因此不适用于EC即电子商务交易中(三)DES加密算法的原理: DES是一种分组密码。假定明文m是由0和1组成的长度为64位的符号串,密钥k也是64位的0、1符号串。 设:M=m1m2m3m64K=k1k2k3k64 加密过程可表达如下: DES(m)=IP-1T16T15T2T1IP(m) 其中:IP(m)是初始置换,IP-1是
15、逆置换,T16 T1是16次迭代。 初始置换IP功能是把输入的明文m按位重新组合,并把输出分为L0、R0两部分,每部分各长32位,其置换规则如下: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 逆置换IP-1经过16次迭代运算后,得到L16、R16,将此作为输入,进行逆置换。逆置
16、换满足: IPIP-1=IP-1IP=I 逆置换正好是初始置换的逆运算。 T16 T1的迭代计算DES的迭代算法采用模2加法。在通信的两端,双方约定了一致的密钥。在通信的源点用密钥对核心数据进行加密并形成密文,然后,以密文的形式在公共通信网中传输到通信网络的终点。数据到达终点后,用同样的密钥对密文数据进行解密,便再现了明文形式的核心数据。这样,便保证了核心数据(如PIN、MAC等)在公共通信网中传输的安全性和可靠性。(四)DES加密算法的实现:1 变换密钥,取得 64 位的密钥,其中第 8 位作为奇偶校验位。 2 舍弃 64 位密钥中的奇偶校验位,根据以下数组 3.1(PC-1)进行密钥变换,
17、得到 56位的密钥,在变换中,奇偶校验位可以被舍弃。 数组 3.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 3 将变换后的密钥分为两个部分,开始的 28 位称为 C0,最后的 28 位称为 D0。4 生成 16 个子密钥,初始 I=1。 5 同时将 CI、DI左移 1 位或 2 位,根据 I 值
18、决定左移的位数。 1I:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 左移位数:1 1 2 2 2 2 2 2 1 2 2 2 2 2 2 1 6 将 CIDI作为一个整体按以下数组 3.2(PC-2)变换,得到 48 位的 KI。 数组 3.2 变换选择 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 7 从 5 处循环执
19、行,直到 K16被计算完成。 8 处理 64 位的数据。 取得 64 位的数据,如果数据长度不足 64 位,应该将其扩展为 64 位(例如补零)。 将 64 位数据按以下数组 3.3 变换(IP)。 数组 3.3 初始变换 (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
20、9 将变换后的数据分为两部分,开始的 32 位称为 L0,最后的 32 位称为 R0。 10 用 16 个子密钥加密数据,初始 I=1。 将 32 位的 RI-1按数组 3.4 扩展为 48 位的 EI-1 数组 3.4 扩展 (E) 32 1 2 3 4 54 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 异或 EI-1和 KI,即 EI-1 XOR KI。 将异或后的结果分为 8 个 6 位长的部分,第 1
21、位到第 6 位称为 B1,第 7 位到第2 位称为 B2,以此类推,第 43 位到第 48 位称为 B8。 按 S 表变换所有的 BJ,初始 J=1。所有在 S 表的值都被当作 4 位长度处理 将BJ的第1位和第6位组合为一个2位长度的变量M,M作为在SJ中的行号 将BJ的第2位到第5位组合,作为一个4位长度的变量N,N作为在SJ中的列号 用 SJMN来取代 BJ 数组 3.5 替换盒 1 (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
22、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 1
23、5 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
24、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 312 1 10 15 9 2 6 8 0 13 3 4 14 7 5 1110 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 13S7 4 11 2 14 15 0 8 13 3 12 9 7 5 10 6 113 0 11 7 4 9 1 10 14 3 5 12 2 15 8 6
25、 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 S8 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 从 a 处循环执行,直到 B8被替代完成 将 B1到 B8组合,按以下数组 3.6(P)变换,得到 P 数组 3.6 变换 P 16 7
26、 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 异或 P 和 LI-1,并把结果放在 RI,即 RI=P XOR LI-1 LI=RI-1 从 a 处开始循环执行,直到 K16被变换完成 组合变换后的 R16L16(注意:R 作为开始的 32 位),按以下数组 3.7(IP-1)变换得到最后的结果 数组 3.7 最后变换 (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 3037 5
27、 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三、汇编语言的概述(一) 汇编语言的定义:汇编语言(Assembly Language)是面向机器的程序设计语言。在汇编语言中,用助记符(Memoni)代替操作码,用地址符号(Symbol)或标号(Label)代替地址码。这样用符号代替机器语盲的二进制码,就把机器语音变成了汇编语言(二)汇编语言的优缺点1汇编语言的优点:易于读写、易于调试和修改,同时也具有机器语言执行速度快,占内
28、存空间少等2汇编语言的缺点:在编写复杂程序时具有明显的局限性,汇编语言依赖于具体的机型,不能通用,也不能在不同机型之间移植。(三)汇编语言的实现 用汇编语言实现DES算法有它的优势也有它的难点。优势是汇编的位操作可以方便地实现置换功能。但用汇编语言实现算法的迭代运算及循环功能比较烦琐。8031有16个可以位寻址的寄存器,可放置128位的数据,利用它可实现DES的转置功能。将明文m放入寄存器27H20H中,即位地址00H对应m64 ,3FH对应m1。利用标志寄存器C可实现置换与逆置换程序。在DES的16次迭代过程中,要实现公式: Li=Ri-1;Ri=Li-1f(Ri-1,ki) 的运算过程,其
29、关键在于f(Ri-1,ki)的功能。f是将32位的输入转化为32位的输出。其中含3项技术: 将32位膨胀为48位的E功能。该项功能可用类似于置换功能的子程序编写。 48位子密钥的生成。为了便于51汇编生成子密钥,可以使用主机用串口下传的方式,由主机将16个子密钥传给89C52为核心的单片机,然后存入80HFFH中。如果密钥是固定的,则可直接将子密钥固化在89C52的Flash中。 S盒的功能是将48位的输入再次缩为32位。具体实现是将S盒表存入89C52的Flash中,每次通过查表求得S输出的结果。 下面列举其中的几个子程序。(1)IP置换子程序;入口寄存器:(MSB)22120(LSB),出
30、口寄存器:(MSB)2F2E2D2C2B2A2928(LSB);功能:将入口寄存器的数据按置换表换位。IP: MOV C,06H ;将m58送到进位标志中MOV 7FH,C ;将进位标志送m1中MOV C,0EH ;将m50送到进位标志中MOV 7EH,C ;将进位标志送m2中;重复,按表编写MOV C,31H ;将m15送到进位标志中MOV 41H,C ;将进位标志送m63中MOV C,39H ;将m7送到进位标志中MOV 40H,C ;将进位标志送m64中RET(2)逆置换子程序;入口寄存器:(MSB)22120(LSB),出口寄存器:(MSB)2F2E2D2C2B2A2928(LSB);
31、功能:将入口寄存器的数据按逆置换表换位。IPRVS:MOV C,18H ;将m40送到进位标志中MOV 7FH,C ;将进位标志送m1中MOV C,38HRET(3)异或子程序;入口寄存器:F3E3D3C,出口寄存器:2B2A2928;功能:将寄存器的和寄存器3F3E3D3C的内容异或。结果保存在2B2A2928寄存器中。XORLF: MOV A,3FH ;将高8位异或XRL A,27HMOV 2BH,A ;放入出口处MOV A,3EHXRL A,26HMOV 2AH,AMOV A,3DHXRL A,25HMOV 29H,AMOV A,3CHXRL A,24H MOV 28H,ARET(4)S
32、盒子程序;入口寄存器:(MSB)2F2E2D2C2B2A2928,出口寄存器:(MSB);功能:48位32位S6TO4: MOV 20h,2FH ;取出高位数据LCALL S ;调用实现Si(b1b6,b2b3b4b5);的功能子程序MOV DPTR,#S1TAB;S盒表的首址MOV A,21H ;取出第几个S盒LCALL DPTRADDCLR AMOVC A,A+DPTR;求出S盒的表地址及S 结果SWAP AMOV 27H,A ;保存高位结果MOV 20H,2EHLCALL S;重复RET四、DES加密算法的过程和循环过程(一) DES加密算法过程DES的总体方案如图1所示。与其他任何一种
33、加密方案一样,加密函数有两个输入:待加密的明文和密钥。.在这里,明文的长度必须为64bit,而密钥的长度为56bit。64bit 密文K16K2K1初始置换逆初始置换32bit 对换第16轮第2轮第1轮置换选择2置换选择2置换选择2循环左移循环左移循环左移置换选择164bit 明文56bit 密钥图1DES加密算法的一般描述观察这张图的左边部分,可以看到明文的处理经过了三个阶段。首先,64bit的明文经过一个初始置换IP表1 (a)后,比特重排产生了经过置换的输入。.接下来的一个阶段是由对同一个函数进行16次循环组成的,这个函数本身既包含有置换又包含有替代函数。最后一个循环(第16个)的输出由
34、64bit组成,它是输入明文和密钥的函数,这个输出的左边和右边两个部分经过交换后就得到预输出。最后,预输出通过一个逆初始置换(IP-1 ) 表1 (b) 就生成了64bit的密文,这个置换是初始置换的逆置换。除了出始和最终置换以外,DES具有严格的Feidtel密码结构。图二的右半部分给出了56bit密钥的使用方式.密钥首先通过一个置换函数,接着对于16个循环的每一个,都通过一个循环左移操作和一个置换操作的组合产生出一个子密钥Ki。对每一个循环来说,置换函数是相同的,但由于密钥比特的重复移位,产生的子密钥并不相同。表1 DES的置换表(a)初始置换(IP) (b)逆初始置换(IP-1)58 5
35、0 42 34 26 18 10 260 52 44 36 28 20 12 462 54 46 38 30 22 14 664 56 48 40 32 24 16 857 49 41 33 25 17 9 159 51 43 35 27 19 11 361 53 45 37 29 21 13 563 55 47 39 31 23 15 740 8 48 16 56 24 64 3239 7 47 15 55 23 63 3138 6 46 14 54 22 62 3037 5 45 13 53 21 61 2936 4 44 12 52 20 60 3835 3 43 11 51 19 59
36、 2734 2 42 10 50 18 58 2633 1 41 9 49 17 57 25 (c)扩展置换(E) 324812162024281 2 3 45 6 7 89 10 11 1213 14 15 1617 18 19 2021 22 23 2425 26 27 2829 30 31 325 9 1317 21 2529 1(d)置换函数(P)16 7 20 21 29 12 28 171 15 23 26 5 18 31 102 8 24 14 32 27 3 919 13 30 6 22 11 4 25(二)循环过程图2给出了一循环的内部结构。在这里仍然先把注意力集中到图形的左
37、半部分。每个64bit的中间结果的左右两个部分被当成两个独立的32bit数值处理,分别标记为L(左)和R(右)。与任何古典的Feistel密码中一样,每一个循环的总的处理过程都可以总结为下列公式:Li=Ri-1Ri=Li-1F(Ri-1, Ki)在这个循环中使用的密钥Ki的长度是48bit。输入的R的长度是32bit。这个输入的R先被扩展到48bit,扩展操作由表1(c)定义,它由包括一个置换和一个包含重复使用R中16个比特的扩展操作组成。所得到的48bit再和Ki进行异或。这样得到的48bit结果再经过一个置换函数S产生32bit的输出,最后按照表1(d)进行置换。William Stall
38、ings对此进行过详细的研究4。3248 3248 48 扩展置换(E表)32比特置换(P)Li+1 Ri+1Di+1Ci+1 28比特28比特32比特Li Ri Di Ci XOR替代选择(S盒)XOR左移左移置换压缩(置换选择2)Ki图2 DES算法的一个循环S盒子在函数中的作用是替代由一组8个S盒子完成,其中每一个都接受6个比特作为输入并产生4个比特作为输出。这些变换是由表2定义的,这个表的使用方法如下:盒子Si的输入的第一和最后一个比特构成一个2位二进制数,用来选择由Si表中的四行所定义的四种替代的一种,中间的4个比特则选出一列被上述行和列所选择的单元的十进制数码转换为一个4bit的二
39、进制表示就产生了输出。五、DES加密算法的代码*/ #include using namespace std; #pragma comment( lib , cryptlib.lib ) #include #include using namespace CryptoPP; int main(int argc, char* argv) cout DES Parameters : endl; cout Block size : DES_Info:BLOCKSIZE * 8 endl; cout Min key length : DES:MIN_KEYLENGTH * 8 endl; cout M
40、ax key length : DES:MAX_KEYLENGTH * 8 endl; /加密过程 DESEncryption desEncryptor; /加密器 unsigned char desKeyDES:DEFAULT_KEYLENGTH = 2,1,2,1,1,1,1,1; /密钥,这里设置了64bit,但实际上只有56bit有用。 unsigned char inBlockDES:BLOCKSIZE; /要加密的数据块 unsigned char outBlockDES:BLOCKSIZE; /加密后的密文块 unsigned char xorBlockDES:BLOCKSIZE; /必须设定为全零 memset( xorBlock , 0 , DES:BLOCKSIZE ); /置零 memset( inBlock , 0xff , DES:BLOCKSIZE ); /置一 / memset( desKey , 0 , DES:DEFAULT_KEYLENGTH); /置零 desEncryptor.SetKey( desKey , DES:DEFAU