加密解密程序实验报告
凯撒加密实验报告(3篇)

第1篇一、实验目的通过本次实验,掌握凯撒加密法的原理和步骤,了解其在密码学中的应用,并能够使用Python语言实现凯撒加密和解密功能。
二、实验原理凯撒加密法是一种最简单且最广为人知的替换加密技术。
其基本原理是将明文中的每个字母按照字母表的顺序向后(或向前)移动一个固定数目的位置,从而生成密文。
例如,当偏移量为3时,明文中的A将变成D,B变成E,以此类推。
凯撒加密法的密钥是偏移量,它决定了加密过程中字母的移动方向和距离。
密钥的取值范围是1到25,表示将字母表向后移动1到25个位置。
三、实验内容1. 凯撒加密使用Python语言实现凯撒加密功能,具体步骤如下:- 定义一个函数,接收明文和密钥作为参数。
- 将明文中的每个字母按照字母表的顺序向后移动密钥指定的位置。
- 对于超出字母表范围的字母,将其转换回字母表的首部。
- 返回加密后的密文。
2. 凯撒解密使用Python语言实现凯撒解密功能,具体步骤如下:- 定义一个函数,接收密文和密钥作为参数。
- 将密文中的每个字母按照字母表的顺序向前移动密钥指定的位置。
- 对于超出字母表范围的字母,将其转换回字母表的首部。
- 返回解密后的明文。
3. 实验演示使用实验代码演示凯撒加密和解密过程,包括以下示例:- 示例1:明文为“The quick brown fox jumps over the lazy dog”,密钥为3,加密后的密文为“Wkh txlfn eurzq ira mxpsv ryhu wkh odcb grj”。
- 示例2:密文为“Wkh txlfn eurzq ira mxpsv ryhu wkh odcb grj”,密钥为3,解密后的明文为“The quick brown fox jumps over the lazy dog”。
四、实验结果与分析1. 加密效果通过实验验证,凯撒加密法能够有效地将明文转换为密文,且解密过程也能够将密文恢复为明文。
AES加密解密实验报告

AES加密解密实验报告实验目的:了解和学习AES加密算法的原理和实现过程,掌握AES加密解密的方法。
实验原理:AES(Advanced Encryption Standard)高级加密标准,是一种对称加密算法,使用相同的密钥进行加密和解密。
AES加密算法使用数学运算和逻辑操作混合的方式,通过多轮迭代和替代、逆替代、置换等步骤,对数据进行加密和解密操作。
实验材料和方法:材料:计算机、Python编程环境。
方法:通过Python编程环境调用AES库函数,进行AES加密解密实验。
实验步骤:1. 导入AES库函数:在Python编程环境中,导入AES的库函数。
```pythonfrom Crypto.Cipher import AESfrom Crypto.Random import get_random_bytes```2. 生成随机密钥:使用get_random_bytes(函数生成一个长度为16字节的随机密钥。
```pythonkey = get_random_bytes(16)```3. 实例化AES加密对象:使用AES.new(函数,传入随机密钥和加密模式“AES.MODE_ECB”创建AES加密对象。
```pythoncipher = AES.new(key, AES.MODE_ECB)```4. 加密数据:使用encrypt(函数,传入要加密的数据进行加密操作。
```pythonmessage = "This is a secret message.".encodeciphertext = cipher.encrypt(message)```5. 解密数据:使用decrypt(函数,传入密文进行解密操作。
```pythonplaintext = cipher.decrypt(ciphertext)```6. 打印加密和解密结果:使用print(函数,打印加密前后和解密后的数据。
现代密码算法实验报告(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)输出加密后的密文。
加密解密实验报告

竭诚为您提供优质文档/双击可除加密解密实验报告篇一:Aes加密解密实验报告信息安全工程课程实验报告Aes加密解密的实现课程名称:信息安全工程学生姓名:学生学号:专业班级:任课教师:黄小菲3112041006系统工程2038班蔡忠闽20XX年11月22日目录1.背景................................................. ................................................... . (1)1.1Rijndael密码的设计标准:............................................... .................................11.2设计思想................................................. ................................................... .......12.系统设计................................................. ................................................... . (2)2.1系统主要目标................................................. ................................................... ..22.2功能模块与系统结构................................................. . (2)2.2.1字节替换subbyte............................................ ...........................................22.2.2行移位shiftRow........................................... ..............................................22.2.3列混合mixcolumn.......................................... ..........................................32.2.4轮密钥加AddRoundKey........................................ .....................................42.2.5逆字节替换................................................. ..............................................42.2. 6逆行移位InvshiftRow........................................ .. (4)2.2.7逆列混淆................................................. .. (4)3加密模式................................................. ................................................... (5)3.1电子密码本ecb模式................................................. ........................................53.2加密块链模式cbc模......................................64系统功能程序设计................................................. ................................................... . (8)4.1基本加密部分................................................. ................................................... ..84.1.1字节替换................................................. ...................................................84.1.2行移位................................................. ................................................... ...84.1.3列混合................................................. ................................................... (9)4.1.4轮密钥加.................................................94.1.5密钥扩展................................................. . (10)4.1.6逆字节替换................................................. ..............................................114.1 .7逆行移位................................................. .. (1)14.1.8逆列混合................................................. . (12)4.1.9加密................................................. ................................................... .....124.1.10解密................................................. ................................................... (13)5实验结果................................................. (14)5.1需要加密文件................................................. .. (1)45.2实验加密解密结果................................................. ...........................................156参考资料................................................. ................................................... . (16)1.背景Aes,密码学中的高级加密标准(Advancedencryptionstandard,Aes),又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。
DES加密解密实验报告

DES加密解密实验报告实验报告题目:DES加密解密实验一、实验目的1.了解DES加密算法的工作原理。
2. 学习使用Python编程语言实现DES加密算法。
3.掌握DES加密算法的应用方法。
二、实验原理DES(Data Encryption Standard)是一种用于加密的对称密钥算法,其密钥长度为64位,分为加密过程和解密过程。
1.加密过程(1)初始置换IP:将64位明文分成左右两部分,分别为L0和R0,进行初始置换IP操作。
(2)子密钥生成:按照规则生成16个子密钥,每个子密钥长度为48位。
(3)迭代加密:通过16轮迭代加密运算,得到最终的密文。
每轮迭代加密包括扩展置换、异或运算、S盒替代、P置换和交换操作。
(4)逆初始置换:将最终的密文分成左右两部分,进行逆初始置换操作,得到最终加密结果。
2.解密过程解密过程与加密过程类似,但是子密钥的使用顺序与加密过程相反。
三、实验材料与方法材料:电脑、Python编程环境、DES加密解密算法代码。
方法:1. 在Python编程环境中导入DES加密解密算法库。
2.输入明文和密钥。
3.调用DES加密函数,得到密文。
4.调用DES解密函数,得到解密结果。
5.输出密文和解密结果。
四、实验步骤1.导入DES加密解密算法库:```pythonfrom Crypto.Cipher import DES```2.输入明文和密钥:```pythonplaintext = "Hello World"key = "ThisIsKey"```3.创建DES加密对象:```pythoncipher = DES.new(key.encode(, DES.MODE_ECB) ```。
加解密实验报告

一、实验模块1. 实验名称:加解密实验2. 实验目的:掌握基本的加密和解密方法,理解加密算法的工作原理,并能够使用C语言实现加解密功能。
3. 实验环境:Windows操作系统,C语言编译器(如Visual Studio)二、实验标题加解密实验:基于RSA算法和DES算法的加密与解密三、实验内容概述本次实验主要涉及两种加密算法:RSA算法和DES算法。
通过学习这两种算法的原理,使用C语言实现加解密功能,并验证加密和解密过程是否正确。
四、实验日期、实验操作者实验日期:2023年10月15日实验操作者:张三五、实验目的1. 理解RSA算法和DES算法的原理。
2. 使用C语言实现RSA算法和DES算法的加解密功能。
3. 验证加密和解密过程是否正确。
六、实验步骤1. RSA算法原理及实现(1)生成密钥对:使用C语言实现RSA算法的密钥生成过程,生成公钥和私钥。
(2)加密过程:使用公钥对明文进行加密,得到密文。
(3)解密过程:使用私钥对密文进行解密,得到明文。
2. DES算法原理及实现(1)密钥生成:生成DES算法的密钥,通常为56位。
(2)加密过程:使用DES算法对明文进行加密,得到密文。
(3)解密过程:使用DES算法对密文进行解密,得到明文。
3. 验证加密和解密过程(1)选择一段明文,分别使用RSA算法和DES算法进行加密,记录密文。
(2)使用相应的私钥或密钥对密文进行解密,得到明文。
(3)比较加密后的密文和解密后的明文,验证加密和解密过程是否正确。
七、实验环境1. 操作系统:Windows 102. 编译器:Visual Studio 20193. 编程语言:C语言八、实验过程1. RSA算法实验(1)生成密钥对```c#include <stdio.h>#include <stdlib.h>// RSA算法生成密钥对void generateKeys(int n, int e, int d, int p, int q) {// 初始化公钥和私钥p = 61;q = 53;n = p q;e = 17;// 计算私钥d = 2753;}int main() {int p, q, n, e, d;generateKeys(&p, &e, &d, &q, &n);printf("Public Key: (%d, %d)\n", n, e); printf("Private Key: (%d, %d)\n", n, d); return 0;}```(2)加密过程```c#include <stdio.h>#include <math.h>// RSA算法加密int encrypt(int m, int n, int e) {int c = pow(m, e) % n;return c;}int main() {int m, n, e, c;printf("Enter the message: ");scanf("%d", &m);printf("Public Key: (%d, %d)\n", n, e);c = encrypt(m, n, e);printf("Encrypted Message: %d\n", c);return 0;}```(3)解密过程```c// RSA算法解密int decrypt(int c, int n, int d) {int m = pow(c, d) % n;return m;}int main() {int c, n, d, m;printf("Enter the encrypted message: "); scanf("%d", &c);printf("Private Key: (%d, %d)\n", n, d); m = decrypt(c, n, d);printf("Decrypted Message: %d\n", m);return 0;}```2. DES算法实验(1)密钥生成```c#include <stdio.h>// DES算法密钥生成void generateDESKey(char key, char desKey) {// 将密钥转换为DES密钥for (int i = 0; i < 56; i++) {desKey[i] = key[i / 8] & (1 << (7 - (i % 8))); }}int main() {char key[8];char desKey[56];printf("Enter the DES key: ");scanf("%s", key);generateDESKey(key, desKey);printf("DES Key: ");for (int i = 0; i < 56; i++) {printf("%02x", desKey[i]);}printf("\n");return 0;}```(2)加密过程```c#include <stdio.h>// DES算法加密void encryptDES(char input, char key, char output) { // 使用DES算法对输入数据进行加密// 此处省略加密算法的具体实现}int main() {char input[64];char key[8];char output[64];printf("Enter the message: ");scanf("%s", input);printf("DES Key: ");scanf("%s", key);encryptDES(input, key, output);printf("Encrypted Message: %s\n", output);return 0;}```(3)解密过程```c#include <stdio.h>// DES算法解密void decryptDES(char input, char key, char output) { // 使用DES算法对输入数据进行解密// 此处省略解密算法的具体实现}int main() {char input[64];char key[8];char output[64];printf("Enter the encrypted message: ");scanf("%s", input);printf("DES Key: ");scanf("%s", key);decryptDES(input, key, output);printf("Decrypted Message: %s\n", output);return 0;}```3. 验证加密和解密过程(1)RSA算法验证```c#include <stdio.h>#include <math.h>// RSA算法加密int encrypt(int m, int n, int e) {int c = pow(m, e) % n;return c;}// RSA算法解密int decrypt(int c, int n, int d) {int m = pow(c, d) % n;return m;}int main() {int m, n, e, d, c, m2;printf("Enter the message: ");scanf("%d", &m);printf("Public Key: (%d, %d)\n", n, e);c = encrypt(m, n, e);printf("Encrypted Message: %d\n", c);printf("Enter the Private Key: (%d, %d)\n", n, d); m2 = decrypt(c, n, d);printf("Decrypted Message: %d\n", m2);if (m == m2) {printf("Encryption and Decryption are successful!\n"); } else {printf("Encryption and Decryption failed!\n");}return 0;}```(2)DES算法验证```c#include <stdio.h>// DES算法加密void encryptDES(char input, char key, char output) {// 使用DES算法对输入数据进行加密// 此处省略加密算法的具体实现}// DES算法解密void decryptDES(char input, char key, char output) {// 使用DES算法对输入数据进行解密// 此处省略解密算法的具体实现}int main() {char input[64];char key[8];char output[64];printf("Enter the message: ");scanf("%s", input);printf("DES Key: ");scanf("%s", key);encryptDES(input, key, output);printf("Encrypted Message: %s\n", output);decryptDES(output, key, input);printf("Decrypted Message: %s\n", input);if (strcmp(input, "Hello") == 0) {printf("Encryption and Decryption are successful!\n");} else {printf("Encryption and Decryption failed!\n");}return 0;}```九、实验结论通过本次实验,我们掌握了RSA算法和DES算法的原理,并使用C语言实现了加解密功能。
DES_加密解密算法C实现--实验报告des算法实验

DES_加密解密算法C实现--实验报告des算法实验.....1实验一1、实验题目利用C/C++编程实现DES加密算法或MD5加密算法。
我选择的是用C++语言实现DES的加密算法。
2、实验目的通过编码实现DES算法或MD5算法,深入掌握算法的加密原理,理解其实际应用价值,同时要求用C/C++语言实现该算法,让我们从底层开始熟悉该算法的实现过程3、实验环境操作系统:WIN7旗舰版开发工具:VisualStudio2022旗舰版开发语言:C++4、实验原理DES加密流程2如上图所示为DES的加密流程,其中主要包含初始置换,压缩换位1,压缩换位2,扩展置换,S盒置换,异或运算、终结置换等过程。
初始置换是按照初始置换表将64位明文重新排列次序扩展置换是将原32为数据扩展为48位数据,它主要由三个目的:1、产生与子密钥相同的长度2、提供更长的结果,使其在加密过程中可以被压缩3、产生雪崩效应,使得输入的一位将影响两个替换S盒置换是DES算法中最核心的容,在DES中,只有S盒置换是非线性的,它比DES中其他任何一步都提供更好的平安性终结置换与初始置换相对应,它们都不影响DES的平安性,主要目的是为了更容易将明文与密文数据一字节大小放入DES的f算法中DES解密流程与加密流程根本相同,只不过在进行16轮迭代元算时,将子密钥生成的K的次序倒过来进行迭代运算5、实验过程记录在对DES算法有了清晰的认识后,编码过程中我将其分为几个关键局部分别进行编码,最后将整个过程按顺序执行,即可完成DES的加密,代码的主要几个函数如下://Byte转为BitByteToBit(ElemTypech,ElemTypebit[8])//Bit转为ByteBitToByte(ElemTypebit[8],ElemType&ch)//初始置换InitialE某(ElemTypeInorder[64],ElemTypeDisorder[64])//终结置换AntiE某(ElemTypeDisorder[64])//扩展置换E某pandE某(ElemTypeRightMsg[32],ElemTypeE某pandMsg[48])//16轮迭代加密MoveLeft(ElemTypeC[28],ElemTypeD[28],ElemTypeL0[32],ElemType R0[32])3//16轮迭代解密mMoveLeft(ElemTypeC[28],ElemTypeD[28],ElemTypeL0[32],ElemTyp eR0[32])//生成48位子密钥GetCD48(ElemTypeC[28],ElemTypeD[28],ElemTypeSecret[48])//48位明文与子密钥进行异或运算某OR(ElemTypeE某pandMsg[48],ElemTypeSecret[48],ElemTypeResult[48])//S盒四位输出getSOut(ElemTypeResult[48],ElemTypeSout[32])//直接置换DirE某change(ElemTypeSout[32],ElemTypeDirOut[32])//Li与Ri 进行抑或运算某ORLR(ElemTypeDirOut[32],ElemTypeLeft[32],ElemTypeResult[32])函数执行次序和调用关系关系如下:6.源代码//DES.cpp:定义控制台应用程序的入口点。
加密解码_实训报告

一、实训目的本次实训旨在通过实际操作,加深对加密和解码原理的理解,提高对加密算法的应用能力,并培养在实际工作中运用加密技术保护信息安全的能力。
通过实训,学生能够:1. 掌握常见的加密算法,如对称加密、非对称加密和哈希算法。
2. 理解加密和解码的过程,包括密钥管理、加密操作和验证过程。
3. 学会使用加密工具和库,如Python的cryptography库。
4. 能够根据实际需求选择合适的加密算法,并解决加密过程中遇到的问题。
二、实训环境1. 操作系统:Windows 102. 编程语言:Python3.83. 加密库:cryptography4. 实训工具:PyCharm三、实训原理1. 对称加密:使用相同的密钥进行加密和解密。
常见的对称加密算法有AES、DES 和3DES。
2. 非对称加密:使用一对密钥,公钥用于加密,私钥用于解密。
常见的非对称加密算法有RSA和ECC。
3. 哈希算法:将任意长度的数据映射为固定长度的哈希值,用于验证数据的完整性和一致性。
常见的哈希算法有SHA-256、MD5和SHA-1。
四、实训过程1. 对称加密实训:- 使用AES算法对一段文本进行加密和解密。
- 使用DES算法对一段文本进行加密和解密。
- 比较不同对称加密算法的效率和安全性。
2. 非对称加密实训:- 使用RSA算法生成密钥对,并使用公钥加密、私钥解密一段文本。
- 使用ECC算法生成密钥对,并使用公钥加密、私钥解密一段文本。
- 比较不同非对称加密算法的效率和安全性。
3. 哈希算法实训:- 使用SHA-256算法对一段文本进行哈希运算。
- 使用MD5算法对一段文本进行哈希运算。
- 比较不同哈希算法的效率和安全性。
4. 实际应用实训:- 使用加密工具和库对文件进行加密和解密。
- 使用加密算法保护通信过程中的数据传输安全。
- 分析加密过程中可能出现的安全问题,并提出解决方案。
五、实训结果1. 成功掌握了AES、DES、RSA、ECC和SHA-256等加密算法的原理和应用。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
程序设计实践加密解密程序实验报告课题概述1.1课题目标和主要内容:利用MFC类或者win32编写windows程序,实现加密解密的功能。
1.2系统的主要功能:1.实现用户界面友好的操作。
2.具有对称编码体制,可以实现:i.凯撒密码:能够自定义密钥,自由输入明文,进行加密、解密,在对话框中返回加密和解密后的内容。
ii.置换密码:能够自定义密钥,自由输入明文,经矩阵变换进行加密、解密,在对话框中返回加密和解密后的内容iii.对称加密DES:用MFC调用WIN32编写的程序,在用户友好界面操作的同时显示程序加密,解密结果。
3.具有非对称编码体制:i. RSA加密解密:随机产生p,q,经检验是否互质,若不互质接着产生两个随机数,直到二者互质为止。
自动生成p,q,N及加密解密的密钥,可以自由输入明文,返回加密、解密的内容。
ii. MD5消息摘要计算:用MFC调用WIN32编写的程序,在用户友好界面操作的同时显示程序的加密结果。
4.信息隐藏技术:用LSB在图片(bmp格式,任意位置的图片)中写入信息,读取信息并显示出来,可以擦除信息。
可以自定义密钥。
5. AES加密解密:用MFC调用WIN32编写的程序,在用户友好界面操作的同时显示程序加密,解密结果。
6. 以上的所有对文字加密解密的方法(除LSB以外其余所有方法),都可以用于文件加密,解密,并能够及时保存加密,解密的信息到一个TXT文档,可以存在用户想存放的地方。
7.更多:链接了一个可加密解密,功能更为齐全的网站,若是上述方法不能满足用户需求,可以在程序运行的窗口中点击相应按钮,在联网的条件下进行在线加密解密。
一、系统设计2.1系统总体框架:2.2主要的层次逻辑为:1.界面窗口:改善设计,修正效果图:2.将书上的C++语言改用MFC适应的进行编程,实现相应功能:凯撒加解密3.或者用系统函数调用WIN32编好的程序:4.进行文件操作,加密解密后保存文件。
6.调用函数实现网页链接:2.3设计思想:(1)新建一个基于单文档的MFC应用程序,工程名称为secret。
(2)编辑菜单栏,添加可以实现的功能。
并为实现功能建立并设计所需要的对话框,并建立相应的类。
也要为对话框中的编辑栏添加相应的成员变量,根据算法设计来定是value还是control类别,再为它们取好名字,选合适的变量类型,例如:在我的程序里,我把密钥和明文一般定义为control类别,CEDIT类型,密文有CEDIT也有CString类型。
这样可以方便实现把编辑栏中输入的信息传给程序,再通过相应的还是进行一番调整后返回信息。
对话框中也还会有些BUTTON,要为他们添加消息响应函数实现操作。
为了自己方便起见,可以把对话框,菜单栏中相应项的ID改为自己能辨别出来作用的。
(3)如有需要可以在Csecretview类中添加,显示对话框。
void CsecretView::Oncaser(){// TODO: 在此添加命令处理程序代码mycaesar my_dlg;my_dlg.DoModal();}直接在MFC程序中编写的操作,相关类如下。
2.4系统程序流程图及设计:设计功能,编辑菜单栏是否需要设计相关对话框?是否新建并设计一个对话框为该对话框添加一个类,编写相应的代码在CView类中为菜单栏编写相应的消息响应函数。
运行,调试直到能够实现设计的功能。
2.5模块划分图:2.8类的关系图:我们在编写加密解密程序时,主要使用了一下几个类:2.7存储结构及内存分配:存储结构:主要使用数组、指针,存储密钥,明文,密文并对它们进行操作。
在DES,MD5等算法中一开始就需要存储矩阵等大量信息,在加密解密是也会占据内存,MD5占用的内存较大。
2.8关键算法分析:1. 凯撒密码的实现:[1]算法功能:输入密钥与明文,用for循环实现位移。
从而加密,解密。
[2]算法基本思想:需要将书上的C++语言转化为MFC适应的语言,如cout,cin都通过添加成员变量由对话框上的操作来实现。
[3]算法时间复杂度为O(1);空间复杂度为O(1);(由数组长度限制了输入密等长度,故而不为O(n))[4]其关键代码如下:void mycaesar::Oncode(){// TODO: 在此添加控件通知处理程序代码UpdateData(TRUE);char s[100];CString c;SendDlgItemMessage(IDC_EDIT2, WM_GETTEXT, 100, (LPARAM)s);c = s;for (int i = 0;i<=100; i++){if (s[i] >= 'a'&& s[i] <= 'z')s[i] = ((int)(s[i] - 'a') + key) % 26 + 'a';else if (s[i] >= 'A'&& s[i] <= 'Z')s[i] = ((int)(s[i] - 'A') + key) % 26 + 'A';}SendDlgItemMessage(IDC_EDIT3, WM_SETTEXT, 100, (LPARAM)s);SendDlgItemMessage(IDC_EDIT3, EM_SETSEL, 0, -1);UpdateData(FALSE);}void mycaesar::Ondecode() //解密算法实现{// TODO: Add your control notification handler code hereUpdateData(TRUE);char ss[100];CString c;SendDlgItemMessage(IDC_EDIT3, WM_GETTEXT, 100, (LPARAM)ss);c = ss;for (int i = 0; i <= 100; i++){if (ss[i] >= 'a'&& ss[i] <= 'z')ss[i] = ((int)(ss[i] - 'a') - key) % 26 + 'a';else if (ss[i] >= 'A'&& ss[i] <= 'Z')ss[i] = ((int)(ss[i] - 'A') - key) % 26 + 'A';}SendDlgItemMessage(IDC_EDIT4, WM_SETTEXT, 100, (LPARAM)ss);SendDlgItemMessage(IDC_EDIT4, EM_SETSEL, 0, -1);UpdateData(FALSE);}void mycaesar::Oncaser(){// TODO: 在此添加命令处理程序代码mycaesar my_dlg;my_dlg.DoModal();}2.置换加密的实现:[1]算法功能:输入密钥与明文,用矩阵实现位移。
从而加密,解密。
[2]算法基本思想:用二维矩阵实现加密解密,化为一维数组后返回数据。
[3]算法时间复杂度为O(1);空间复杂度为O(1);(由数组长度限制了输入密等长度,故而不为O(n))[4]其关键代码如下:void juzheng::OnEncrypt(){UpdateData(true);char clear1[100] = { 0 };SendDlgItemMessage(IDC_EDIT2, WM_GETTEXT, 100, (LPARAM)clear1);SendDlgItemMessage(IDC_EDIT9, WM_GETTEXT, 100, (LPARAM)key_s);SendDlgItemMessage(IDC_EDIT9, WM_GETTEXT, 100, (LPARAM)keyc);len = strlen(clear1);for (int i = 0; i< len; i++){for (int j = 0; j < len - i - 1; j++){if (key[i]>key[i + 1]){char ttt = key[i];key[i] = key[i + 1];key[i + 1] = key[ttt];}}for (int k = 0, i = 0, j = 0; k<100; k++){cleartext[i][j] = clear[k];row = i + 1;j++;if (j >= len){j = 0; i++;}}for (int i = 0; i < len; i++){for (int j = 0; j < len; j++){if (key[j] == key_s[j]){for (int k = 0; k < row; k++){ciphertext1[k][i] = cleartext[k][j];}}}char so[10000], r[100];int q = 0;int w = 0;int b = 0;for (int g = 0; g < 100; g++){for (int h = 0; h < 100; h++){so[b] = ciphertext1[g][h];b++;}so[g] = r[g];}SendDlgItemMessage(IDC_EDIT1, WM_SETTEXT, 100, (LPARAM)clear1);SendDlgItemMessage(IDC_EDIT1, EM_SETSEL, 0, -1);UpdateData(false);}void juzheng::OnDecode(){// TODO: 在此添加控件通知处理程序代码UpdateData(true);char pp[100];for (int i = 0; i < len; i++){for (int j = 0; j < len; j++){if (key[i] == key_s[j]){for (int k = 0; k < row; k++){ciphertext2[k][i] = ciphertext1[k][j];}}}}SendDlgItemMessage(IDC_EDIT2, WM_GETTEXT, 100, (LPARAM)pp);SendDlgItemMessage(IDC_EDIT3, WM_SETTEXT, 100, (LPARAM)pp);SendDlgItemMessage(IDC_EDIT3, EM_SETSEL, 0, -1);UpdateData(false);2.DES的MFC关键代码转化:[1]算法功能:输入密钥与明文,用矩阵变化加密,解密。