一对称密钥密码加密解密

合集下载

对称密码算法的基本原理

对称密码算法的基本原理

对称密码算法的基本原理
对称密码算法是一种使用相同的密钥对数据进行加密和解密的算法。

其基本原理是将明文按照一定规则和密钥进行计算,得到密文;将密文按照相同的规则和密钥进行计算,得到明文。

整个过程中,密钥起到了保密数据的作用。

对称密码算法的基本原理可以概括为以下几个步骤:
1. 密钥生成:通信双方在进行加密和解密之前需要共享一个密钥。

密钥可以通过随机数生成算法生成,也可以通过密钥交换协议在通信双方之间进行协商。

2. 加密过程:明文按照一定规则和密钥进行计算,生成密文。

加密算法的设计中通常包括替换、置换、混淆以及迭代等操作,以增强算法的安全性。

3. 解密过程:密文按照相同的规则和密钥进行计算,生成明文。

解密算法与加密算法相反,通过逆向的操作将密文还原为明文。

对称密码算法的优点是计算速度快、实现简单,适用于对大量数据进行加密和解密的场景。

然而,对称密码算法的缺点是通信双方需要提前共享密钥,密钥的管理和分发成为了一个安全性问题。

另外,对称密码算法也不适用于实现安全通信和存储,因为密钥的保密性无法得到保障。

为了解决这些问题,常常将对称密码算法与非对称密码算法相结合,使用非对称密码算法来保证密钥的安全性,然后使用对称密码算法来对通信数据进行加密和解密。

对称加密算法的概念

对称加密算法的概念

对称密码算法有时又叫传统密码算法,就是加密密钥能够从解密密钥中推算出来,反过来也成立。

在大多数对称算法中,加密解密密钥是相同的。

这些算法也叫秘密密钥算法或单密钥算法,它要求发送者和接收者在安全通信之前,商定一个密钥。

对称算法的安全性依赖于密钥,泄漏密钥就意味着任何人都能对消息进行加密解密。

只要通信需要保密,密钥就必须保密。

对称算法的加密和解密表示为:Ek(M)=CDk(C)=M对称算法可分为两类[8]。

一次只对明文中的单个位(有时对字节)运算的算法称为序列算法或序列密码。

另一类算法是对明文的一组位进行运算,这些位组称为分组,相应的算法称为分组算法或分组密码。

现代计算机密码算法的典型分组长度为64位――这个长度大到足以防止分析破译,但又小到足以方便作用。

这种算法具有如下的特性:Dk(Ek(M))=M常用的采用对称密码术的加密方案有5个组成部分(如图3所示):l)明文:原始信息。

2)加密算法:以密钥为参数,对明文进行多种置换和转换的规则和步骤,变换结果为密文。

3)密钥:加密与解密算法的参数,直接影响对明文进行变换的结果。

4)密文:对明文进行变换的结果。

5)解密算法:加密算法的逆变换,以密文为输入、密钥为参数,变换结果为明文。

对称密码术的优点在于效率高(加/解密速度能达到数十兆/秒或更多),算法简单,系统开销小,适合加密大量数据。

尽管对称密码术有一些很好的特性,但它也存在着明显的缺陷,包括:l)迸行安全通信前需要以安全方式进行密钥交换。

这一步骤,在某种情况下是可行的,但在某些情况下会非常困难,甚至无法实现。

2)规模复杂。

举例来说,A与B两人之间的密钥必须不同于A和C两人之间的密钥,否则给B的消息的安全性就会受到威胁。

在有1000个用户的团体中,A需要保持至少999个密钥(更确切的说是1000个,如果她需要留一个密钥给他自己加密数据)。

对于该团体中的其它用户,此种倩况同样存在。

这样,这个团体一共需要将近50万个不同的密钥!推而广之,n个用户的团体需要N2/2个不同的密钥。

简述加密和解密的基本原理

简述加密和解密的基本原理

简述加密和解密的基本原理加密和解密是信息安全中常用的技术手段,目的是保护敏感信息的传输和存储安全。

加密是将原始明文信息通过一定的算法转化为密文,使得未经授权的用户无法理解密文的真实含义。

而解密则是将密文还原为明文,使得授权用户可以理解和使用信息。

加密和解密的基本原理可以归纳为两种主要方法:对称加密和非对称加密。

下面分别介绍这两种加密算法的基本原理及其特点。

1. 对称加密:对称加密算法使用相同的密钥进行加密和解密操作。

简单来说,就是用一个“锁”将明文数据“锁起来”,然后再用同样的“锁”将密文“打开”,只有获知密钥的人才能进行解密。

对称加密算法有很多种,如DES、3DES、AES等。

对称加密的基本流程如下:1. 初始化:选择一个密钥(通常是一串二进制数)。

2. 加密:将明文信息按照一定的规则和算法转化为密文。

3. 解密:用相同的密钥将密文转化为明文,还原原始信息。

对称加密的优点是算法简单、加密解密速度快,适合大量数据的加解密操作。

然而,对称加密存在一个重大问题,那就是密钥的传递问题。

即使算法本身很安全,如果攻击者能够获取到密钥,那么整个加密系统就会被破解。

2. 非对称加密:非对称加密算法使用一对密钥进行加密和解密操作。

这对密钥由一个公钥和一个私钥组成,公钥可以公开,而私钥只有密钥的所有者才能拥有。

通过使用不同的密钥进行加密和解密,非对称加密算法解决了对称加密密钥传递的问题。

非对称加密算法有很多种,如RSA、DSA等。

非对称加密的基本流程如下:1. 初始化:生成一对公钥和私钥。

2. 加密:用公钥将明文转化为密文。

3. 解密:用私钥将密文转化为明文。

非对称加密的优点是密钥传递问题得到了解决,密钥的私密性大大提高。

加密方向只需要公开公钥,而密钥的所有者需要妥善保管私钥。

然而,非对称加密算法的缺点是加密解密速度较慢,适合小规模数据传输和加密。

总的来说,加密和解密是信息安全领域中常用的技术手段,旨在保护敏感信息的传输和存储安全。

对称密钥密码体制

对称密钥密码体制

对称密钥密码体制对称密钥密码体制是指加密和解密过程中使用相同的密钥。

这种体制也叫做单密钥密码体制,因为加密和解密使用的密钥相同,能在保持安全的前提下对数据进行快速处理。

对称密钥密码体制通常分为分组密码和流密码两种。

分组密码是将明文分成固定长度的块,再和密钥一起通过一系列算法进行加密。

这种方法处理速度非常快,因为加密和解密算法是对数据块进行分组处理的,同时相同密钥的使用也降低了密钥管理的复杂性。

然而,分组密码存在的一个问题是,对数据块的分组可能会导致重复的数据,这些数据可以被攻击者用来破解密钥。

流密码是将明文和密钥通过一个伪随机数生成器计算出一个流式密钥,然后将流式密钥和明文一起进行异或运算来加密数据。

这种方法加密和解密速度也非常快,而且每个数据块都有独立的流式密钥,增强了数据的安全性。

然而,流密码也存在一些问题,例如在密钥被泄露时,加密数据就变得不安全了。

对称密钥密码体制的优点包括:1. 处理速度快:加密和解密使用的密钥相同,从而能快速处理数据。

2. 加密方式简单:对称密钥密码体制通常采用分组密码或流密码,在数据加密和解密过程中使用块或流式加密,处理速度快,同时也方便计算机的硬件或软件实现。

3. 密钥管理相对简单:使用相同的密钥进行加密和解密,可以使加密和解密的过程更加简单,从而降低了密钥管理的复杂度。

4. 对称密钥密码体制广泛应用于大多数数据通信应用中,如数据存储、数据传输等。

对称密钥密码体制的缺点包括:1. 密钥管理不安全:对称密钥密码体制存在一个主要问题,即密钥的安全性。

如果密钥被泄露或者失窃,那么加密数据就暴露了,导致数据不安全。

2. 非法用户可以访问数据:一旦非法用户获取了密钥,他们便可以访问数据而不会受到限制,这可能会导致重大的安全问题。

3. 可能存在重放攻击:由于每个数据块都使用相同的密钥进行加密,数据可能被攻击者截获并用于重放攻击,从而使数据的安全性大大降低。

4. 算法的安全性不能得到保证:对称密钥密码体制的安全性取决于加密算法本身的安全性。

密码机加密逻辑

密码机加密逻辑

密码机加密逻辑
密码机加密逻辑通常涉及多个步骤和原理,以下是一些常见的加密逻辑和原理:
1. 替代密码:替代密码是最早使用的加密技术之一,它通过替换明文中的字符来生成密文。

例如,替换字母表中的每个字母为一个不同的字母。

这种加密方式可以被简单地破解,因为替代密码通常不改变字符的顺序。

2. 置换密码:置换密码是另一种早期的加密技术,它通过重新排列明文中的字符顺序来生成密文。

例如,将明文中的每个字符按照某种规则移动到一个新的位置。

这种加密方式比替代密码更难破解,因为它改变了字符的顺序。

3. 对称密钥加密:对称密钥加密是一种使用相同密钥进行加密和解密的加密方式。

常见的对称密钥加密算法包括DES、AES等。

这种加密方式的安全性取决于密钥的保密性,如果密钥被泄露,那么加密的信息就可以被轻易地解密。

4. 非对称密钥加密:非对称密钥加密是一种使用不同密钥进行加密和解密的加密方式。

其中一个密钥是公钥,用于加密信息;另一个密钥是私钥,用于解密信息。

公钥可以公开分发,而私钥需要保密。

常见的非对称密钥加密算法包括RSA、ECC等。

这种加密方式比对称密钥加密更安全,因为它使用了两个不同的密钥,即使公钥被泄露,私钥仍然可以保持安全。

除了上述的加密原理,还有一些其他的加密技术和原理,如哈希函数、数字签名等。

这些技术可以用于保护数据的完整性、认证和授权等方面。

总的来说,密码机加密逻辑是一个复杂的过程,需要使用各种技术和原理来保护数据的安全性和完整性。

不同的加密算法和技术有各自的优缺点,需要根据具体的应用场景和需求来选择适合的加密方式。

对称加密技术名词解释

对称加密技术名词解释

对称加密技术名词解释
对称加密是一种加密技术,它使用同一个密钥进行加密和解密。

在对称加密中,发送方将明文和密钥作为输入,通过一系列的加密算法,将明文转换为密文。

然后,接收方使用相同的密钥和相同的算法对密文进行解密,以恢复原始的明文。

对称加密的优点包括速度快和计算效率高。

由于加密和解密使用相同的密钥,它的计算成本相对较低。

然而,对称加密的主要缺点是密钥的传输和管理问题。

发送方和接收方必须在通信之前共享密钥,这可能存在风险,例如被拦截或被泄露。

为解决密钥传输和管理的问题,一种常见的做法是使用非对称加密与对称加密相结合。

非对称加密使用一对密钥,即公钥和私钥。

发送方使用接收方的公钥对明文进行加密,接收方使用自己的私钥对密文进行解密。

这样,密钥不需要传输,只需要保护好私钥即可。

在实际应用中,对称加密通常用于加密大量数据,因为它的速度快。

常见的对称加密算法包括DES、3DES、AES等。

总结而言,对称加密是一种使用相同密钥进行加密和解密的加密技术。

它的优点是速度快和计算效率高,但需要解决密钥传输和管理的问题。

与非对称加密结合使用可以提高安全性。

对称密码名词解释

对称密码名词解释

对称密码名词解释
对称密码是一种加密算法,也被称为共享密钥密码。

在对称密码中,发送方和接收方使用相同的密钥来加密和解密数据。

这种加密方法迅速、高效,并且在许多安全通信应用中被广泛使用。

对称密码的原理是,发送方使用密钥将原始数据加密成密文,并将其发送给接收方。

接收方使用相同的密钥来解密密文,以还原成原始数据。

因此,密钥的保密性非常重要,只有发送方和接收方知道密钥,才能确保数据的保密性。

对称密码有许多不同的算法,其中最常见的是DES(数据加密标准)和AES(高级加密标准)。

这些算法使用了不同的加密技术和密钥长度,以提供更高的安全性和保密性。

对称密码也具有一些局限性。

首先,发送方和接收方必须事先共享密钥,这可能会增加密钥管理的复杂性和安全风险。

其次,对称密码没有提供身份验证机制,因此无法验证数据的发送方是否是合法的。

为了解决这些问题,通常结合使用对称密码和非对称密码。

发送方使用非对称密码的公钥来加密对称密钥,并将其发送给接收方。

接收方使用相应的私钥来解密对称密钥,并使用对称密钥来加密和解密数据。

这种组合使用的加密方式称为混合加密,能够提供更好的安全性和灵活性。

总结而言,对称密码是一种使用相同密钥进行加密和解密的加密算法。

它是安全通信的重要组成部分,但需要注意密钥管理和身份验证的问题,并通常与非对称密码结合使用,以提供更高的安全性。

密码基础知识(2)以RSA为例说明加密、解密、签名、验签

密码基础知识(2)以RSA为例说明加密、解密、签名、验签

密码基础知识(2)以RSA为例说明加密、解密、签名、验签⼀、RSA加密简介 RSA加密是⼀种⾮对称加密。

是由⼀对密钥来进⾏加解密的过程,分别称为公钥和私钥。

具体查看⼆,公钥加密算法和签名算法我们从公钥加密算法和签名算法的定义出发,⽤⽐较规范的语⾔来描述这⼀算法,以RSA为例。

2.1,RSA公钥加密体制RSA公钥加密体质包含如下3个算法:KeyGen(密钥⽣成算法),Encrypt(加密算法)以及Decrypt(解密算法)。

1)密钥⽣成算法以安全常数作为输⼊,输出⼀个公钥PK,和⼀个私钥SK。

安全常数⽤于确定这个加密算法的安全性有多⾼,⼀般以加密算法使⽤的质数p的⼤⼩有关。

越⼤,质数p⼀般越⼤,保证体制有更⾼的安全性。

在RSA中,密钥⽣成算法如下:算法⾸先随机产⽣两个不同⼤质数p和q,计算N=pq。

随后,算法计算欧拉函数接下来,算法随机选择⼀个⼩于的整数e,并计算e关于的模反元素d。

最后,公钥为PK=(N, e),私钥为SK=(N, d)。

2)加密算法以公钥PK和待加密的消息M作为输⼊,输出密⽂CT。

在RSA中,加密算法如下:算法直接输出密⽂为3)解密算法以私钥SK和密⽂CT作为输⼊,输出消息M。

在RSA中,解密算法如下:算法直接输出明⽂为。

由于e和d在下互逆,因此我们有: 所以,从算法描述中我们也可以看出:公钥⽤于对数据进⾏加密,私钥⽤于对数据进⾏解密。

当然了,这个也可以很直观的理解:公钥就是公开的密钥,其公开了⼤家才能⽤它来加密数据。

私钥是私有的密钥,谁有这个密钥才能够解密密⽂。

否则⼤家都能看到私钥,就都能解密,那不就乱套了。

2.2,RSA签名体制签名体制同样包含3个算法:KeyGen(密钥⽣成算法),Sign(签名算法),Verify(验证算法)。

1)密钥⽣成算法同样以安全常数作为输⼊,输出⼀个公钥PK和⼀个私钥SK。

在RSA签名中,密钥⽣成算法与加密算法完全相同。

2)签名算法以私钥SK和待签名的消息M作为输⼊,输出签名。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验一对称密钥密码加密解密实验实验学时:2学时实验类型:设计实验要求:必修【实验目的】1、掌握对称密钥密码体制的基本概念;2、掌握对称密钥密码体制加密/解密的工作原理;3、重点掌握DES密码算法加密/解密的基本原理;4、通过用DES算法对实际的数据进行加密/解密运算来深刻了解DES的运行原理。

【实验内容】1、根据DES密码算法原理,用Turbo C2.0或Visual C++6.0设计编写符合DES密码算法思想的加密/解密程序。

【实验环境】1、操作系统:Windows9x/NT/2000/XP2、编程软件:Turbo C2.0或Visual C++6.0【实验原理】1、DES算法工作的基本原理:DES是基于Feistel密码结构的分组密码,其入口参数有三个:key、data、mode。

其中,key为加密/解密时使用的密钥;data为加密/解密的数据;mode为其工作模式:当模式为加密模式时,明文按照64位进行分组,形成明文分组,此时key用于对数据加密;当模式为解密模式时,key用于对64位的密文分组进行解密,以恢复明文。

2、DES算法共进行16轮迭代操作,每轮中都使用相同的轮函数F,如下:F(Ri-1,Ki)=p_box(S_boxes(Expand(Ri-1) ⊕ Ki))整个算法的流程如图所示:DES加密算法流程图(一)、密钥生成1、生成种子密钥K使用密钥流生成器生成64位(8个字节)的种子密钥K,每个字节的第8位作为奇偶校验位,不参与实际运算中子密钥的生成过程。

2、生成每一轮迭代中使用的子密钥ki。

(1) 根据PC-1置换进行种子密钥K的变换,舍弃64位种子密钥K中的8个奇偶校验位,得到56位的密钥。

(2) 将变换后的密钥分为左右两部分各28位,分别称为C0和D,即PC-1(K)=C 0D0。

(3) 生成16个子密钥ki,1≤i≤16。

(i) 将Ci 、Di循环左移1位或2位,根据i值由“循环左移表”决定循环左移的位数,即计算C i=LS i(C i-1)和D i=LS i(D i-1),其中,LS表示循环左移。

(ii) 将循环左移后的Ci 和Di作为一个56位的整体按置换表PC-2进行变换,得到本轮所使用的48位子密钥ki,即k i=PC-2(C i D i)(1≤i≤16)。

(二)、处理64位数据1、取得64位明文分组数据m,如果数据长度不足64位,应该将其扩展为64位(例如补零)。

2、将64位明文分组数据m按初始置换表IP进行变换,获得64位的m,并将m0分为左右两部分,前面32位记为L,后面32位记为R,即 m0=IP(m)=L0R0。

3、用16个子密钥ki(1≤i≤16)加密数据。

所用变换公式为:F(Ri-1,Ki)=p_box(S_boxes(Expand(Ri-1) ⊕ Ki))(1) 将32位的Ri-1按扩展置换E扩展成48位;(2) 异或Ri-1和ki;(3) 将异或后的结果分为8个6位长的部分,第1位到第6位称为S[1],第7位到第12位称为S[2],依此类推,第43位到第48位称为S[8];(4) 按S盒的变换原理变换所有的S[j],1≤j≤8。

每一个S盒都是将输入的6位数据经过处理后转换成4位数据输出。

(5) 将S[1]到S[8]的输出组合成32位数据,按P置换进行变换,变换的结果就是轮函数F。

(6) 异或轮函数F和Li-1,结果就是Ri,即R i=L i-1⊕ F(R i-1,K i)(7) L i=R i-1(8) 循环执行轮函数F,直到K16被变换完成。

4、第16轮迭代结束后左、右部分各是L16和R16,将左右部分交换,作为64位的预输出,即L17=R16,R17=L16。

5、将变换后的R16L16按逆初始置换IP-1进行变换得到最后的结果,即为密文,即c=IP-1(R16L16 )。

【实验步骤】本实验为设计型实验,要求学生自己根据实验原理,自行设计实验步骤,利用Turbo C2.0或Visual C++6.0进行编程,实现对一个文件进行加密和解密。

【思考题】1、DES算法中大量的置换运算的作用是什么?2、DES算法中S盒变换的作用是什么?3、通过查阅相关资料了解目前破解DES算法的基本原理或方法。

附:例程#include <stdio.h>#include <string.h>#include <windows.h>#include <conio.h>#include "Schedle.h"//该头文件中包含了DES算法中所使用的全部变换表class CShift{public:DWORDLONG mask[16];int step[16];CShift(){for(int i=0;i<16;i++){step[i]=2;//其余轮的迭代中,循环左移的位数是2位mask[i]=0xc000000;}step[0]=step[1]=step[8]=step[15]=1;//第1、2、9、16轮迭代中,循环左移的位数是1位mask[0]=mask[1]=mask[8]=mask[15]=0x8000000;}};class CDES{public:CDES(){m_dwlKey=0;m_dwlData=0;ConvertTableToMask(dwlKey_PC_1,64);ConvertTableToMask(dwlKey_PC_2,56);ConvertTableToMask(dwlData_IP,64);ConvertTableToMask(dwlData_Expansion,32);ConvertTableToMask(dwlData_FP,64);ConvertTableToMask(dwlData_P,32);Generate_S();}void EncryptKey(char *);unsigned char* EncryptData(unsigned char *);unsigned char* DescryptData(unsigned char*);private:void ConvertTableToMask(DWORDLONG *,int);void Generate_S(void);DWORDLONG ProcessByte(unsigned char*,BOOL);DWORDLONG PermuteTable(DWORDLONG,DWORDLONG*,int);void Generate_K(void);void EncryptKernel(void);DWORDLONG Generate_B(DWORDLONG,DWORDLONG*);DWORDLONG dwlData_S[9][4][16];CShift m_shift;DWORDLONG m_dwlKey;DWORDLONG m_dwlData;DWORDLONG m_dwl_K[17];};void CDES::EncryptKey(char *key){//输入种子密钥printf("\n请输入种子密钥: %s\n",key);m_dwlKey=ProcessByte((unsigned char*)key,TRUE);m_dwlKey=PermuteTable(m_dwlKey,dwlKey_PC_1,56);Generate_K();//16轮的子密钥生成函数}void CDES::Generate_K(void){DWORDLONG C[17],D[17],tmp;C[0]=m_dwlKey>>28; D[0]=m_dwlKey&0xfffffff;//在16轮迭代中,每一轮的Ci和Di分别进行循环左移后,再组合成56位的数据经过PC-2置换得到本轮的子密钥kifor(int i=1;i<=16;i++){tmp=(C[i-1]&m_shift.mask[i-1])>>(28-m_shift.step[i-1]);C[i]=((C[i-1]<<m_shift.step[i-1])|tmp)&0x0fffffff; tmp=(D[i-1]&m_shift.mask[i-1])>>(28-m_shift.step[i-1]);D[i]=((D[i-1]<<m_shift.step[i-1])|tmp)&0x0fffffff; m_dwl_K[i]=(C[i]<<28)|D[i];m_dwl_K[i]=56位m_dwl_K[i]=PermuteTable(m_dwl_K[i],dwlKey_PC_2,48);}}DWORDLONG CDES::ProcessByte(unsigned char *key,BOOL shift){unsigned char tmp;DWORDLONG byte=0;int i=0;while(i<8){while(*key){if(byte!=0)byte<<=8;tmp=*key;if(shift)tmp<<=1;i++;key++;}if(i<8)byte<<=8;i++;}return byte;}DWORDLONG CDES::PermuteTable(DWORDLONG dwlPara,DWORDLONG* dwlTable,int nDestLen){ int i=0;DWORDLONG tmp=0,moveBit;while(i<nDestLen){moveBit=1;if(dwlTable[i]&dwlPara){moveBit<<=nDestLen-i-1;tmp|=moveBit;}i++;}return tmp;}void CDES::ConvertTableToMask(DWORDLONG *mask,int max){int i=0;DWORDLONG nBit=1;while(mask[i]!=0){nBit=1;nBit<<=max-mask[i];mask[i++]=nBit;}}void CDES::Generate_S(void){//S盒变换int i;int j,m,n;m=n=0;j=1;for(i=0;i<512;i++){dwlData_S[j][m][n]=S_box[i];n=(n+1)%16;if(!n){if(!m)j++;}}}unsigned char* CDES::EncryptData(unsigned char *block){//加密函数unsigned char *EncrytedData=new unsigned char(15);printf("\n输入的明文分组为: %s\n",block);m_dwlData=ProcessByte(block,0);m_dwlData=PermuteTable(m_dwlData,dwlData_IP,64);EncryptKernel();//调用轮函数DWORDLONG bit6=m_dwlData;for(int i=0;i<11;i++){EncrytedData[7-i]=(unsigned char)(bit6&0x3f)+46;bit6>>=6;}EncrytedData[8]='\0';printf("\n加密后的密文为: %s",EncrytedData);for(i=0;i<8;i++){EncrytedData[7-i]=(unsigned char)(m_dwlData&0xff);m_dwlData>>=8;}EncrytedData[8]='\0';return EncrytedData;}void CDES::EncryptKernel(void){ //轮函数int i=1;DWORDLONG L[17],R[17],B[9],EK,PSB;L[0]=m_dwlData>>32;R[0]=m_dwlData&0xffffffff;//16轮迭代for(i=1;i<=16;i++){L[i]=R[i-1];R[i-1]=PermuteTable(R[i-1],dwlData_Expansion,48); EK=R[i-1]^m_dwl_K[i];PSB=Generate_B(EK,B);R[i]=L[i-1]^PSB; }R[16]<<=32;m_dwlData=R[16]|L[16];m_dwlData=PermuteTable(m_dwlData,dwlData_FP,64);}unsigned char* CDES::DescryptData(unsigned char *desData){int i=1;unsigned char *DescryptedData=new unsigned char(15);DWORDLONG L[17],R[17],B[9],EK,PSB;DWORDLONG dataPara;dataPara=ProcessByte(desData,0);dataPara=PermuteTable(dataPara,dwlData_IP,64);R[16]=dataPara>>32;L[16]=dataPara&0xffffffff;for(i=16;i>=1;i--){R[i-1]=L[i];L[i]=PermuteTable(L[i],dwlData_Expansion,48); EK=L[i]^m_dwl_K[i];PSB=Generate_B(EK,B);L[i-1]=R[i]^PSB;}L[0]<<=32;dataPara=L[0]|R[0];dataPara=PermuteTable(dataPara,dwlData_FP,64);for(i=0;i<8;i++){DescryptedData[7-i]=(unsigned char)(dataPara&0xff);dataPara>>=8;}DescryptedData[8]='\0';printf("\n\n解密后的明文为: %s\n",DescryptedData);return DescryptedData;}DWORDLONG CDES::Generate_B(DWORDLONG EKPara,DWORDLONG *block){int i,m,n;DWORDLONG tmp=0;for(i=8;i>0;i--){//将48位数据按照6位一组进行分组后分别进入8个S盒中 block[i]=EKPara&0x3f;m=(int)(block[i]&0x20)>>4;m|=block[i]&0x01;n=(int)(block[i]<<1)>>2;block[i]=dwlData_S[i][m][n];EKPara>>=6;//当前的6位数据根据i值选择进入某一个S盒中进行变换 }//8个S盒依次变换for(i=1;i<=8;i++){tmp|=block[i];tmp<<=4;//每一个S盒将6位输入转换为4位输出}tmp>>=4;tmp=PermuteTable(tmp,dwlData_P,32);return tmp;}void main(void){CDES des;des.EncryptKey("12345678");unsigned char *result=des.EncryptData((unsigned char*)"DemoData"); des.DescryptData(result);}运行结果实验二公钥密码加密解密实验实验学时:2学时实验类型:设计实验要求:必修【实验目的】1、掌握公钥密码体制的基本概念;2、掌握公钥密码体制加密/解密的工作原理;3、重点掌握RSA密码算法加密/解密的基本原理;4、通过用RSA算法对实际的数据进行加密/解密运算来深刻了解RSA的运行原理。

相关文档
最新文档