RSA非对称加密算法实验报告

合集下载

实验三、不对称加密算法RSA (1)

实验三、不对称加密算法RSA (1)

实验三、实验报告
姓名:学号:实验日期:
一、实验名称: 不对称加密算法RSA
二、实验目的
1、掌握RSA算法的工作原理。

2、熟悉利用素性检测找素数的工作原理。

三、实验基本方法
1、用C或C++语言编写找素数的算法,并编写RSA参数的计算程序,并将结果显示显示在屏幕上。

2、用C或C++语言编写一个RSA算法;
3、编程实现对32位二进数(4个字符)的加、解密;
4、手工验证加、解密的结果。

说明:
1、RSA算法可以自编,也可以网上下载现成算法。

四、实验步骤
1、编程实现找素数的算法。

2、编程实现找RSA参数的计算程序。

3、编写一个RSA算法;
4、对4个字符加、解密,改变最低1位明文观察并记录RSA的输出。

5、对4个字符加、解密,改变最高1位明文观察并记录RSA的输出。

五、实验结果
1、程序设计的思想,及程序关键原代码。

2、说明素性检测的原理。

3、说明RSA参数的e、d计算的原理。

4、报告对4个字符加、解密,改变最高低和最低1位明文RSA的输出结果。

5、分析上述输出的原因,手工验证输出的正确性。

实验4 非对称密码算法RSA

实验4   非对称密码算法RSA

实验4 非对称密码算法RSA(验证型)一、实验目的通过实际编程了解非对称密码算法RSA的加密和解密过程,加深对非对称密码算法的认识。

二、实验原理对称密码算法要求通信双方通过交换密钥实现使用同一个密钥,这在密钥的管理、发布和安全性方面存在很多问题,而非对称密码算法解决了这个问题。

加密密钥和解密密钥是不同的,其中加密密钥是可以公开的,解密密钥是要求保密的,并且不能用其中的一个推导出另一个。

它的安全性是建立在“大数分解和素性检测”这个数论难题的基础上,即将两个大素数相乘在计算上容易实现,而将该乘积分解为两个大素数因子的计算量相当大。

虽然它的安全性还未能得到理论证明,但经过30年的密码分析和攻击,迄今仍然被实践证明是安全的。

三、实验环境运行Windows或者Linux操作系统的PC机,具有gcc(Linux)、VC(Windows)等C语言编译环境。

四、实验内容和步骤1、为了加深对RSA算法的了解,根据已知参数:2qp,手工=M11,,3==计算公私钥,并对明文进行加密,然后对密文进行解密。

2、编写RSA程序,加密一段文字,了解RSA算法原理。

尝试加密一大段文字,记录程序的运行时间。

使用DES算法加密相同的文字,比较两种算法加密的速度。

x e mod,记录程3、编写一个程序,随机选择3个较大的数nx,,,计算ne序运行时间。

查阅资料给出简单说明大数在计算机上是如何表示,如何进行运算。

4、查阅资料,找出目前实际可行的素数判定法则,并比较各自的优缺点。

五、实验步骤1、p=3,q=11 则n=pq=33,f(n)=20,选择e=7,则d=3那么加密得c=29 解密得m=22、打开VC++,编写程序如下:#include<stdio.h>#include <iostream.h>#include <stdlib.h>#include <time.h>//using namespace std;typedef struct RSA_PARAM_Tag{ //64 位数unsigned __int64 p, q; //两个素数,不参与加密解密运算unsigned __int64 f; //f=(p-1)*(q-1),不参与加密解密运算unsigned __int64 n, e; //公匙,n=p*q,gcd(e,f)=1unsigned __int64 d; //私匙,e*d=1 (mod f),gcd(n,d)=1unsigned __int64 s; //块长,满足2^s<=n的最大的s,即log2(n) } RSA_PARAM;//小素数表,用于素性测试前,用小素数来初步筛选素数.const static unsigned __int64 g_PrimeTable[]={3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97};const static long g_PrimeCount=sizeof(g_PrimeTable) / sizeof(long); //乘数const unsigned __int64 multiplier=12747293821;// 加数const unsigned __int64 adder=1343545677842234541;//随机数类class RandNumber{private:unsigned __int64 randSeed;/* */public:RandNumber(unsigned __int64 s=0);unsigned __int64 Random(unsigned __int64 n);};/* */RandNumber::RandNumber(unsigned __int64 s){if(!s){randSeed= (unsigned __int64)time(NULL);}else{randSeed=s;}}/* 一个简单的随机数产生算法*/unsigned __int64 RandNumber::Random(unsigned __int64 n){randSeed=multiplier*randSeed+adder;return randSeed%n;}//定义了一个静态的类对象static RandNumber g_Rnd;/*模乘运算,返回值x=a*b mod n*/inline unsigned __int64 MulMod(unsigned __int64 a, unsigned __int64 b, unsigned __int64 n){return a * b % n;}/*模幂运算,返回值x=base^pow mod n*/unsigned __int64 PowMod(unsigned __int64 base, unsigned __int64 pow, unsigned __int64 n){ unsigned __int64 r=1;pow=pow+1;while(pow!=1) //循环结果为pow(a,b)%c{r=r*base;r=r%n;pow--;}return r;}/*{ unsigned __int64 a=base, b=pow, c=1;while(b){while(!(b & 1)){b>>=1; //a=a * a % n; //函数看起来可以处理64位的整数,但由于这里a*a在a>=2^32时已经造成了溢出,因此实际处理范围没有64位a=MulMod(a, a, n);}b--; //c=a * c % n; //这里也会溢出,若把64位整数拆为两个32位整数不知是否可以解决这个问题。

现代密码算法实验报告(3篇)

现代密码算法实验报告(3篇)

第1篇一、实验目的1. 了解现代密码学的基本原理和数论基础知识;2. 掌握非对称密码体制的著名代表RSA加密算法的工作原理和流程;3. 设计实现一个简单的密钥系统;4. 掌握常用加密算法AES和DES的原理及实现。

二、实验内容1. RSA加密算法实验2. AES加密算法实验3. DES加密算法实验三、实验原理1. RSA加密算法RSA算法是一种非对称加密算法,由罗纳德·李维斯特、阿迪·沙米尔和伦纳德·阿德曼三位密码学家于1977年提出。

其基本原理是选择两个大质数p和q,计算它们的乘积n=pq,并计算欧拉函数φ(n)=(p-1)(q-1)。

选择一个整数e,满足1<e<φ(n)且e与φ(n)互质。

计算e关于φ(n)的模逆元d。

公开密钥为(e,n),私有密钥为(d,n)。

加密过程为C=Me mod n,解密过程为M=Cd mod n。

2. AES加密算法AES(Advanced Encryption Standard)是一种分组加密算法,采用128位分组大小和128、192或256位密钥长度。

AES算法主要分为四个阶段:初始轮、密钥扩展、中间轮和最终轮。

每个轮包括字节替换、行移位、列混淆和轮密钥加。

3. DES加密算法DES(Data Encryption Standard)是一种分组加密算法,采用64位分组大小和56位密钥长度。

DES算法主要分为16轮,每轮包括置换、置换-置换、S盒替换和密钥加。

四、实验步骤及内容1. RSA加密算法实验(1)选择两个大质数p和q,计算n=pq和φ(n)=(p-1)(q-1);(2)选择一个整数e,满足1<e<φ(n)且e与φ(n)互质,计算e关于φ(n)的模逆元d;(3)生成公开密钥(e,n)和私有密钥(d,n);(4)用公钥对明文进行加密,用私钥对密文进行解密。

2. AES加密算法实验(1)选择一个128、192或256位密钥;(2)初始化初始轮密钥;(3)进行16轮加密操作,包括字节替换、行移位、列混淆和轮密钥加;(4)输出加密后的密文。

rsa算法实验报告

rsa算法实验报告

rsa算法实验报告RSA算法实验报告摘要:RSA算法是一种非对称加密算法,被广泛应用于网络安全领域。

本实验通过对RSA算法的原理和实现进行了深入研究,并通过编写代码实现了RSA算法的加密和解密过程。

实验结果表明,RSA算法具有较高的安全性和可靠性,能够有效保护数据的机密性和完整性。

一、引言RSA算法是一种基于大数因子分解的非对称加密算法,由Rivest、Shamir和Adleman三位数学家于1977年提出。

它的安全性基于两个大素数的乘积难以分解,因此被广泛应用于数字签名、数据加密等领域。

本实验旨在通过对RSA 算法的原理和实现进行研究,深入了解其加密和解密过程,并通过编写代码实现RSA算法的加密和解密过程。

二、RSA算法原理RSA算法的原理主要包括密钥生成、加密和解密三个过程。

首先,选择两个大素数p和q,并计算它们的乘积n=p*q,然后计算欧拉函数φ(n)=(p-1)*(q-1)。

接下来选择一个整数e,使得1<e<φ(n),且e与φ(n)互质,即e和φ(n)的最大公约数为1。

然后计算e的乘法逆元d,使得(e*d) mod φ(n) = 1。

最后,公钥为(n, e),私钥为(n, d)。

加密过程中,将明文m通过公钥加密为密文c,即c=m^e mod n;解密过程中,将密文c通过私钥解密为明文m,即m=c^d mod n。

三、实验设计本实验使用Python语言编写了RSA算法的加密和解密代码,通过输入明文和密钥,实现了对明文的加密和解密过程。

具体实验步骤如下:1. 选择两个大素数p和q,并计算n=p*q,以及φ(n)=(p-1)*(q-1);2. 选择一个整数e,使得1<e<φ(n),且e与φ(n)互质;3. 计算e的乘法逆元d,使得(e*d) mod φ(n) = 1;4. 将明文m通过公钥加密为密文c,即c=m^e mod n;5. 将密文c通过私钥解密为明文m,即m=c^d mod n。

RSA非对称加密算法实验报告

RSA非对称加密算法实验报告
学与工程学院
2009年9月
第一部分
信息加密技术实验
第一部分 信息加密技术实验
一、实验目的:
在数据加密、解密的算法中,DES算法是典型的单密钥体制,RSA是典型的双密 钥体制, 目前均在大量使用。 通过实验, 让学生充分理解和掌握DES和RSA算法,PGP 加密工具的使用。以及通过网络进行数据加密传输的概念。
RSA实验: 运行《RSATool》演示软件: 产生公钥和私钥
第二项任务 DES加密解密工具2.1及其代码——支持字符串及文件加密,支持3重DES
1.DES 2.1 说明
先看看DES 2.1 的截图:
的简介: 2. DES 2.1 2.1的简介:
1.支持任意长度字符串加密解密 2.明文、密钥可以不足8字节 3.支持回车换行,Tab 等特殊字符 4.密文可以选择三种方式显示 5.支持3重DES 6.支持文件加密、解密 7.加密时显示进度
3.DES 算法介绍
关于DES算法的介绍大家可以看我博客里的另一篇文章,[原创]DES算法的介绍以及实
现(含上次DES程序1.0的 源 码 ) ,所以在此不在重述。
提供的 Public 函数 4. yxyDES2 Class Class提供的 提供的Public Public函数
下面我们来看看yxyDES2 类(Class)里public函数和它们的用法: //功能:产生16个28位的key //参数:源8位的字符串(key),存放key的序号0-1 //结果:函数将调用private CreateSubKey将结果存于char SubKeys[keyN][16][48] void InitializeKey(char* srcBytes,unsigned int keyN); //功能:加密8位字符串 //参数:8位字符串,使用Key的序号0-1 //结果:函数将加密后结果存放于private szCiphertext[16] // 用户通过属性Ciphertext得到 void EncryptData(char* _srcBytes,unsigned int keyN); //功能:解密16位十六进制字符串 //参数:16位十六进制字符串,使用Key的序号0-1 //结果:函数将解密候结果存放于private szPlaintext[8] // 用户通过属性Plaintext得到 void DecryptData(char* _srcBytes,unsigned int keyN); //功能:加密任意长度字符串 //参数:任意长度字符串,长度,使用Key的序号0-1 //结果:函数将加密后结果存放于private szFCiphertextAnyLength[8192] // 用户通过属性CiphertextAnyLength 得到 void EncryptAnyLength(char* _srcBytes,unsigned int _bytesLength,unsigned int keyN); //功能:解密任意长度十六进制字符串 //参数:任意长度字符串,长度,使用Key的序号0-1 //结果:函数将加密后结果存放于private szFPlaintextAnyLength[8192] // 用户通过属性PlaintextAnyLength 得到 void DecryptAnyLength(char* _srcBytes,unsigned int _bytesLength, unsigned int keyN); //功能:Bytes到Bits的转换, //参数:待变换字符串,处理后结果存放缓冲区指针,Bits缓冲区大小 void Bytes2Bits(char *srcBytes, char* dstBits, unsigned int sizeBits); //功能:Bits到Bytes的转换, //参数:待变换字符串,处理后结果存放缓冲区指针,Bits缓冲区大小 void Bits2Bytes(char *dstBytes, char* srcBits, unsigned int sizeBits);

非对称加密算法的研究与性能测试结果

非对称加密算法的研究与性能测试结果

非对称加密算法的研究与性能测试结果非对称加密算法是一种常用的加密方法,其中最广泛应用的算法包括RSA、DSA和ECC等。

这些算法在保护用户数据的安全性和保密性方面发挥着重要作用,因此对它们的研究和性能测试具有重要意义。

非对称加密算法采用了一对密钥,即公钥和私钥。

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

这种机制使得非对称加密算法具有较高的安全性,因为即使公钥被泄露,也无法通过公钥推导出私钥。

此外,非对称加密算法还可以实现数字签名和密钥协商等功能。

首先,我们研究了RSA算法(Rivest-Shamir-Adleman)。

RSA是目前最常用的非对称加密算法之一,其安全性基于大整数分解的困难性。

RSA算法的性能主要取决于密钥长度,通常以位数表示。

研究表明,较长的密钥长度能够提供更高的安全性,但也会导致加解密时间增加。

根据我们的测试结果,对于2048位密钥长度的RSA算法,加密速度大约为每秒5000个加密操作,解密速度为每秒500个解密操作。

而对于4096位密钥长度的RSA算法,加密和解密速度则分别降低到每秒1000个和每秒100个操作。

因此,在应用中需要权衡安全性和性能之间的平衡。

其次,我们对DSA算法(Digital Signature Algorithm)进行了研究。

DSA算法是一种用于数字签名的非对称加密算法,它的安全性依赖于离散对数问题的困难性。

DSA算法的性能与密钥长度、哈希算法等因素相关。

我们的测试结果显示,在使用1024位密钥长度和SHA-1哈希算法的情况下,DSA算法的签名速度约为每秒1000个签名操作,验证速度为每秒5000个验证操作。

然而,当我们将密钥长度增加到2048位并使用更安全的SHA-256哈希算法时,DSA算法的性能明显下降,签名速度大约为每秒30个操作,验证速度为每秒150个操作。

因此,在使用DSA算法时需要根据实际需求权衡安全性和性能。

最后,我们对ECC算法(Elliptic Curve Cryptography)进行了性能测试。

rsa加密算法测试的用例及测试结果

rsa加密算法测试的用例及测试结果

RSA加密算法测试用例及测试结果1. 介绍RSA(Rivest-Shamir-Adleman)是一种非对称加密算法,被广泛应用于信息安全领域。

它的安全性基于大数分解的困难性,即将一个大数因数分解为两个质数的乘积。

在本文中,我们将编写用例来测试RSA加密算法,并给出测试结果。

2. 测试目标我们的测试目标是验证RSA加密算法在不同场景下的正确性和性能。

具体来说,我们将测试以下几个方面: - 密钥生成:验证生成的公钥和私钥是否正确且符合预期。

- 加密解密:验证加密后能否成功解密,且解密结果与原始明文一致。

- 签名验签:验证使用私钥签名后能否使用公钥成功验签,且验签结果正确。

- 性能:测试RSA算法在不同输入规模下的执行时间。

3. 测试用例设计3.1 密钥生成3.1.1 生成长度为1024位的RSA密钥对输入:密钥长度为1024位输出:公钥和私钥3.1.2 生成长度为2048位的RSA密钥对输入:密钥长度为2048位输出:公钥和私钥3.2 加密解密3.2.1 使用1024位RSA公钥加密输入:明文、1024位RSA公钥输出:密文3.2.2 使用1024位RSA私钥解密输入:密文、1024位RSA私钥输出:明文3.2.3 使用2048位RSA公钥加密输入:明文、2048位RSA公钥输出:密文3.2.4 使用2048位RSA私钥解密输入:密文、2048位RSA私钥输出:明文3.3 签名验签3.3.1 使用1024位RSA私钥对数据签名输入:数据、1024位RSA私钥输出:签名3.3.2 使用1024位RSA公钥对签名进行验签输入:数据、签名、1024位RSA公钥输出:验签结果(True/False)3.3.3 使用2048位RSA私钥对数据签名**输入:* 数据、2048位RSA私钥输出:签名3.3.4 使用2048位RSA公钥对签名进行验签输入: 数据、签名、2048位RSA公钥输出: 验签结果(True/False)3.4 性能测试3.4.1 加密解密性能测试输入:不同长度的明文、RSA密钥对输出:加密解密时间3.4.2 签名验签性能测试输入:不同长度的数据、RSA密钥对输出:签名验签时间4. 测试结果4.1 密钥生成测试用例输入输出结果测试用例输入输出结果生成长度为1024位的RSA密钥对密钥长度为1024位公钥和私钥通过生成长度为2048位的RSA密钥对密钥长度为2048位公钥和私钥通过4.2 加密解密测试用例输入输出结果使用1024位RSA公钥加密明文、1024位RSA公钥密文通过使用1024位RSA私钥解密密文、1024位RSA私钥明文通过使用2048位RSA公钥加密明文、2048位RSA公钥密文通过使用2048位RSA私钥解密密文、2048位RSA私钥明文通过4.3 签名验签测试用例输入输出结果使用1024位RSA私钥对数据签名数据、1024位RSA私钥签名通过使用1024位RSA公钥对签名进行验签数据、签名、1024位RSA公钥验签结果(True/False)通过使用2048位RSA私钥对数据签名数据、2048位RSA私钥签名通过使用2048位RSA公钥对签名进行验签数据、签名、2048位RSA公钥验签结果(True/False)通过4.4 性能测试4.4.1 加密解密性能测试在不同长度的明文和密钥对下,记录加密和解密的时间,并绘制折线图。

rsa加密算法测试的用例及测试结果

rsa加密算法测试的用例及测试结果

rsa加密算法测试的用例及测试结果RSA加密算法是一种非对称加密算法,通常用于加密和解密大量数据。

在进行RSA算法的测试时,需要针对不同情况设计用例,测试算法的加密性能、解密正确性、加解密效率等关键性能指标,以确保算法的可靠性和安全性。

下面是一些常见的RSA加密算法测试用例及测试结果:1.生成密钥对测试用例:a.输入一个素数p和另一个素数q,测试生成密钥对的过程。

b.输入一个非素数p或q,测试生成密钥对的过程。

测试结果:对于素数p和q,生成密钥对的过程应该成功,并得到有效的公钥和私钥。

对于非素数p或q,生成密钥对的过程应该失败。

2.加密和解密测试用例:a.输入一个明文数据,用公钥进行加密,然后用私钥进行解密。

b.输入一个密文数据,用私钥进行解密。

测试结果:使用公钥进行加密和私钥进行解密的过程应该成功,并得到相同的明文数据。

用私钥进行解密时,应该得到正确的密文数据。

3.非法密钥测试用例:a.输入一个无效的密钥,测试加密和解密的过程。

b.输入一个被篡改的密钥,测试加密和解密的过程。

测试结果:对于无效的密钥,加密和解密的过程应该失败。

对于被篡改的密钥,加密和解密的过程应该失败或者得到错误的结果。

4.高负载测试用例:a.输入一个大容量的数据,测试加密和解密的性能和效率。

b.输入一个大容量的数据,测试生成密钥对的性能和效率。

测试结果:加密和解密大容量数据的过程应该在合理的时间范围内完成,不应该出现明显的性能瓶颈。

生成密钥对的过程也应该在合理的时间范围内完成。

5.并发性能测试用例:a.同时进行多个加密操作,测试加密的并发性能和效果。

b.同时进行多个解密操作,测试解密的并发性能和效果。

测试结果:当进行多个加密或解密操作时,应该能够正常处理请求,并保持合理的性能水平,不会出现明显的延迟或错误。

通过以上测试用例的设计和执行,可以全面地验证RSA加密算法的正确性、性能以及可靠性。

根据测试结果可以进一步优化算法实现,提高加解密的效率和安全性。

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

RSA实验: 运行《RSATool》演示软件: 产生公钥和私钥
第二项任务 DES加密解密工具2.1及其代码——支持字符串及文件加密,支持3重DES
1.DES 2.1 说明
先看看DES 2.1 的截图:
的简介: 2. DES 2.1 2.1的简介:
1.支持任意长度字符串加密解密 2.明文、密钥可以不足8字节 3.支持回车换行,Tab 等特殊字符 4.密文可以选择三种方式显示 5.支持3重DES 6.支持文件加密、解密 7.加密时显示进度
//功能:Bits到Hex的转换 //参数:待变换字符串,处理后结果存放缓冲区指针,Bits缓冲区大小 void Hex2Bits(char *srcHex, char* dstBits, unsigned int sizeBits);
关于文件加密 7. 7.关于文件加密
其实文件加密很简单的,类里没有提供,但是调用 yxyDES2 类里的标准加密函数很容 易就搞定了,这是示例: void CDESToolDlg::OnBnClickedButtonFileGoE() { FILE *fpSrc,*fpDst; CString szSrcPath,szDstPath,szKey1,szKey2; char buff[8] = {0}; long fileSize = 0, hasDone = 0; edtFileSrc.GetWindowText(szSrcPath); edtFileDst.GetWindowText(szDstPath); edtFileKey1.GetWindowText(szKey1); edtFileKey2.GetWindowText(szKey2); if((fpSrc = fopen(szSrcPath.GetBuffer(),"rb")) == NULL) { MessageBox("打不开源文件!","错误",MB_OK | MB_ICONERROR); return; } if((fpDst = fopen(szDstPath.GetBuffer(),"wb")) == NULL) { MessageBox("打不开目的文件!","错误",MB_OK | MB_ICONERROR); return; } fseek(fpSrc,0,SEEK_SET); fseek(fpSrc,0,SEEK_END); fileSize = ftell(fpSrc); rewind(fpSrc); prcsbar.SetRange(0,100); prcsbar.ShowWindow(SW_SHOW); myDES->InitializeKey(szKey1.GetBuffer(),0); if(chbFileTDES.GetCheck()) { myDES->InitializeKey(szKey2.GetBuffer(),1);
二、实验内容和要求:
(一)基础型: 典型单密钥体制DES或典型双密钥体制RSA加、解密系统实现,具体要求如下: (1) DES或RSA加解密软件调试通过。 (2) 利用DES或RSA对某一数据文件进行单次加密和解密操作。 (3) 提供大素数生成功能: 可产生长度最大可达300位16进制(约合360位10进制 数)的大素数,你可以导出素数,也可以从文件中导入素数,也可以产生一个指定长 度的随机大素数。 (4) 界面简洁、友好,便于操作。 (二)提高型: 1. 实现一种基本的混合密码系统,具体要求如下: (1) 数据采用DES加密算法,DES密钥采用RSA加、解密算法。 (2) 系统可产生长度最大可达300位16进制(约合360位10进制数)的大素数,你 可以导出素数, 也可以从文件中导入素数, 也可以产生一个指定长度的随机大素数。 (3) 本系统产生RSA密钥对。产生后,可以将密钥对导出到文本文件,对于公开 密钥和模n你可以不加密,但秘密密钥最好用本系统提供的DES接口加密,使用时再 解密。 (4) 系统的混合加密模块也具有对RSA密钥检错的功能,主要通过解密后DES密 钥的长度来判断的,因为如果RSA密钥错误,那么解密后的DES密钥长度一定超过16 个字节。 2. 实现点到点(即一台计算机到别一台计算机)保密传输系统,采用混合加密 方法。数据加密采用DES算法,DES密钥采用RSA算法,每进行一次通信,更改一次会 话密钥。
5. 加密、解密示例
加密时,首先初始化Key,如果是3重DES需要初始化两个Key,InitializeKey函数的第 一个参数是char *key,第二个参数含义是指定初始化第几个key,即keyNum:
myDES->InitializeKey(szSourceKey1,0); if(bIs3DES) { myDES->InitializeKey(szSourceKey2,1); }
电子商务安全
实验指导书
管理科学与工程学院
2009年9月
第一部分
信息加密技术实验
第一部分 信息加密技术实验
一、实验目的:
在数据加密、解密的算法中,DES算法是典型的单密钥体制,RSA是典型的双密 钥体制, 目前均在大量使用。 通过实验, 让学生充分理解和掌握DES和RSA算法,PGP 加密工具的使用。以及通过网络进行数据加密传输的概念。
关于一些特殊情况的特别说明: yxyDES2 提供一Байду номын сангаас转换函数 6. 6.关于一些特殊情况的特别说明: 关于一些特殊情况的特别说明:yxyDES2 yxyDES2提供一些转换函数
具体示例我的代码里都有,大家可以下载了看看,对于有特殊要求的朋友来说,比如要 用16进制Key,或 2进制明文等,大家可以调用yxyDES2 类里的几个相应的转换函数,将其 转换成byte,即char *。以下是这几个函数的定义: //功能:Bytes到Bits的转换, //参数:待变换字符串,处理后结果存放缓冲区指针,Bits缓冲区大小 void Bytes2Bits(char *srcBytes, char* dstBits, unsigned int sizeBits); //功能:Bits到Bytes的转换, //参数:待变换字符串,处理后结果存放缓冲区指针,Bits缓冲区大小 void Bits2Bytes(char *dstBytes, char* srcBits, unsigned int sizeBits); //功能:Int到Bits的转换, //参数:待变换字符串,处理后结果存放缓冲区指针 void Int2Bits(unsigned int srcByte, char* dstBits); //功能:Bits到Hex的转换 //参数:待变换字符串,处理后结果存放缓冲区指针,Bits缓冲区大小 void Bits2Hex(char *dstHex, char* srcBits, unsigned int sizeBits);
初始化完Key以后我们就可以调用加密、解密函数进行相应操作了,以下代码展示了任
意长度字符串解密: myDES->InitializeKey(szSourceKey1,0); if(bIs3DES) { myDES->InitializeKey(szSourceKey2,1); //key2 //D(key0)-E(key1)-D(key0) myDES>DecryptAnyLength(szCiphertextData,ConvertOtherFormat2Ciphertext(strCiphertext.Get Buffer()),0); myDES->EncryptAnyLength(myDES->GetPlaintextAnyLength(),strlen(myDES>GetPlaintextAnyLength()),1); myDES->DecryptAnyLength(myDES>GetCiphertextAnyLength(),strlen(myDES->GetCiphertextAnyLength()),0); } else { //Decrypt myDES>DecryptAnyLength(szCiphertextData,ConvertOtherFormat2Ciphertext(strCiphertext.Get Buffer()),0); }
3.DES 算法介绍
关于DES算法的介绍大家可以看我博客里的另一篇文章,[原创]DES算法的介绍以及实
现(含上次DES程序1.0的 源 码 ) ,所以在此不在重述。
提供的 Public 函数 4. yxyDES2 Class Class提供的 提供的Public Public函数
下面我们来看看yxyDES2 类(Class)里public函数和它们的用法: //功能:产生16个28位的key //参数:源8位的字符串(key),存放key的序号0-1 //结果:函数将调用private CreateSubKey将结果存于char SubKeys[keyN][16][48] void InitializeKey(char* srcBytes,unsigned int keyN); //功能:加密8位字符串 //参数:8位字符串,使用Key的序号0-1 //结果:函数将加密后结果存放于private szCiphertext[16] // 用户通过属性Ciphertext得到 void EncryptData(char* _srcBytes,unsigned int keyN); //功能:解密16位十六进制字符串 //参数:16位十六进制字符串,使用Key的序号0-1 //结果:函数将解密候结果存放于private szPlaintext[8] // 用户通过属性Plaintext得到 void DecryptData(char* _srcBytes,unsigned int keyN); //功能:加密任意长度字符串 //参数:任意长度字符串,长度,使用Key的序号0-1 //结果:函数将加密后结果存放于private szFCiphertextAnyLength[8192] // 用户通过属性CiphertextAnyLength 得到 void EncryptAnyLength(char* _srcBytes,unsigned int _bytesLength,unsigned int keyN); //功能:解密任意长度十六进制字符串 //参数:任意长度字符串,长度,使用Key的序号0-1 //结果:函数将加密后结果存放于private szFPlaintextAnyLength[8192] // 用户通过属性PlaintextAnyLength 得到 void DecryptAnyLength(char* _srcBytes,unsigned int _bytesLength, unsigned int keyN); //功能:Bytes到Bits的转换, //参数:待变换字符串,处理后结果存放缓冲区指针,Bits缓冲区大小 void Bytes2Bits(char *srcBytes, char* dstBits, unsigned int sizeBits); //功能:Bits到Bytes的转换, //参数:待变换字符串,处理后结果存放缓冲区指针,Bits缓冲区大小 void Bits2Bytes(char *dstBytes, char* srcBits, unsigned int sizeBits);
相关文档
最新文档