当前位置:文档之家› RSA非对称加密算法实验报告

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


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);
相关主题