实验一 凯撒加密解密

合集下载

凯撒加密法实验报告

凯撒加密法实验报告

一、实验目的1. 理解凯撒加密法的原理和步骤。

2. 掌握凯撒加密和解密的方法。

3. 通过实验,加深对加密技术的认识。

二、实验原理凯撒加密法是一种最简单的替换加密技术,其原理是将明文中的每个字母按照字母表的顺序向后(或向前)移动一个固定的位数,生成密文。

例如,当偏移量为3时,明文中的字母A将被替换成密文中的字母D,B变成E,以此类推。

凯撒加密法的加密和解密过程如下:1. 加密过程:(1)将明文中的每个字母按照字母表的顺序向后(或向前)移动一个固定的位数;(2)将移动后的字母替换成密文。

2. 解密过程:(1)将密文中的每个字母按照字母表的顺序向前(或向后)移动一个固定的位数;(2)将移动后的字母替换成明文。

三、实验内容1. 使用凯撒加密法对一段明文进行加密和解密。

(1)选择一段明文,例如:“Hello, World!”;(2)设置一个固定的偏移量,例如:3;(3)按照加密过程,将明文中的每个字母向后移动3位,生成密文;(4)按照解密过程,将密文中的每个字母向前移动3位,还原成明文。

2. 分析凯撒加密法的优缺点。

优点:(1)实现简单,易于理解和操作;(2)加密和解密速度快。

缺点:(1)密钥空间小,容易破解;(2)安全性较低,容易受到攻击。

四、实验步骤1. 创建一个函数,实现凯撒加密和解密功能。

```pythondef caesar_encrypt(text, shift):encrypted_text = ""for char in text:if char.isalpha():shift_amount = shift % 26if char.isupper():encrypted_text += chr((ord(char) - ord('A') + shift_amount) % 26 + ord('A'))else:encrypted_text += chr((ord(char) - ord('a') + shift_amount) % 26 + ord('a'))else:encrypted_text += charreturn encrypted_textdef caesar_decrypt(text, shift):decrypted_text = ""for char in text:if char.isalpha():shift_amount = shift % 26if char.isupper():decrypted_text += chr((ord(char) - ord('A') - shift_amount) % 26 + ord('A'))else:decrypted_text += chr((ord(char) - ord('a') - shift_amount) % 26 + ord('a'))else:decrypted_text += charreturn decrypted_text```2. 使用该函数对一段明文进行加密和解密。

《信息安全》实验报告1 编程实现恺撒密码

《信息安全》实验报告1 编程实现恺撒密码

《信息安全》实验报告(1)实验名称:________________ 指导教师:___________ 完成日期:________________ 专 业:________________ 班 级:___________ 姓 名:________________一、实验目的:掌握典型的单表代换和多表代换的加密方法的实现细节。

二、实验内容:1、编程实现凯撒密码的加密和解密。

要求:既可以进行加密转换,也可以进行解密转换。

程序参考界面如右所示。

可以使用任何编程工具,能处理英文即可。

2、(选做)编程实现维吉尼亚密码的加密和解密。

要求:既可以进行加密转换,也可以进行解密转换。

程序参考界面如右所示。

可以使用任何编程工具,能处理英文即可。

三、程序设计说明:(实现步骤、算法设计思路、流程图等)凯撒密码加密算法:#include <stdio.h>int main(){char P[100];/*定义明文长度*/int K=3,i;printf("请输入明文:\n"); /*输入明文*/gets(P); /* 接受明文*/for(i=0;P[i]!='\0';i++) { /*逐个判断字母的大小*/if(P[i]>='a'&&P[i]<='z') /*小写字母 */P[i]=(P[i]-'a'+K)%26+'a';else if(P[i]>='A'&&P[i]<='Z')/*大写字母 */P[i]=(P[i]-'A'+K)%26+'A';else P[i]=' ';/*如果不是字母,转换为空格*/}printf("加密后 :\n%s\n",P);/*输出密文*/getch();return 0;}凯撒密码的实现 于泳海 2014-9-24 信息管理与信息系统 11级信本班 贾文丽四、实验结果与结论:(经调试正确的源程序和程序的运行结果)明文加密(密钥key=3):五、实验总结:(实验中遇到的问题及解决方法,心得体会等)在本次实验中,学会了凯撒密码的加密与解密。

python凯撒密码解密算法的实现

python凯撒密码解密算法的实现

python凯撒密码解密算法的实现Python凯撒密码解密算法是一种简单的加密方法,它可以通过偏移字母的位置来加密和解密文本。

本文将介绍如何使用Python实现凯撒密码解密算法。

首先,我们需要了解凯撒密码的加密规则。

凯撒密码的加密方法是将明文中的每个字母按照一定的偏移量进行位移,例如,将字母A 移动3位后变成D,将字母B移动3位后变成E,以此类推。

加密的偏移量称为密钥,密钥可以是任意整数,但是通常选择1到25之间的数字。

凯撒密码的解密方法就是将加密后的密文按照相反的方式进行位移,例如,如果加密时使用的是3作为密钥,则在解密时需要将密文中的每个字母向左移3位。

现在我们来看一下Python实现凯撒密码解密算法的具体步骤:1. 首先,我们需要获取输入的密文和密钥。

2. 然后,我们需要将密文中的每个字母按照密钥进行位移,得到解密后的明文。

3. 最后,我们将解密后的明文输出。

下面是Python实现凯撒密码解密算法的示例代码:```def caesar_decrypt(ciphertext, key):plaintext = ''for char in ciphertext:if char.isalpha():char_code = ord(char.lower())char_code -= keyif char_code < ord('a'):char_code += 26plaintext += chr(char_code)else:plaintext += charreturn plaintextciphertext = input('请输入密文:')key = int(input('请输入密钥:'))plaintext = caesar_decrypt(ciphertext, key)print('解密后的明文为:', plaintext)```在这段代码中,我们定义了一个名为`caesar_decrypt`的函数,用于解密凯撒密码。

信息加密与解密实验1-1 经典密码——凯撒密码

信息加密与解密实验1-1 经典密码——凯撒密码

上机实验报告一、实验目的:本次上机实践所涉及并要求掌握的知识点。

1、理解凯撒密码的加密、解密过程二、实验环境PC机一台三、实验内容实验一移动3位的凯撒密码:1.(1)用移动3位的凯撒密码加密“keep this secret”(2)用移动3位的凯撒密码加密你的某位老师的名字2.破译下列谜语的答案。

这些答案是用移动3位的凯撒密码来加密的。

(1)谜语:What do you call a sleeping bull?(你怎么称呼一只睡着的公牛?)答案: D EXOOGRCHU(2)谜语:What is the different between a teacher and a train?(老师与火车的区别是什么?)答案:WKH WHDFKHU VDBV “QR JXP DOORZHG”WKH WUDLQ VDBV “FKHZ FKHZ”实验二移动4位的凯撒密码:1.请解密下面伊薇写给艾比的便条,她使用的是移动4位的凯撒密码WSVVC PIX’W YWI GMTLIVW JVSQ RSA SR2.谜语:What do you call a dog at the beach ?(你怎么称呼一只在海滩上的狗?)答案(移动4位密码):E LSX HSK实验三凯撒密码破解:1.凯撒密码破解密文:NGBKGMUUJZOSK实验四用数传递信息的方法破译以下的谜语:1.谜语:What kind of cookies do birds like?(鸟儿喜欢什么种类的饼干?)答案:2,7,14,2,14,11,0,19,4 2,7,8,17,152.谜语:What always ends everything?(什么总是能终结所有事情?)答案:19,7,4 11,4,19,19,4,17四、实验总结通过上机实践,对所学内容的某个知识点有了更深入的理解,写出一些体会、学习心得,甚至是改进意见。

也可以写对界面设计、算法设计、代码编写、程序调试、程序改进等相关的收获、感悟。

实验1-1 经典密码——凯撒密码

实验1-1 经典密码——凯撒密码

上机实验报告一、实验目的:本次上机实践所涉及并要求掌握的知识点。

1、理解凯撒密码的加密、解密过程二、实验环境PC机一台三、实验内容实验一移动3位的凯撒密码:1.(1)用移动3位的凯撒密码加密“keep this secret”(2)用移动3位的凯撒密码加密你的某位老师的名字2.破译下列谜语的答案。

这些答案是用移动3位的凯撒密码来加密的。

(1)谜语:What do you call a sleeping bull?(你怎么称呼一只睡着的公牛?)答案: D EXOOGRCHU(2)谜语:What is the different between a teacher and a train?(老师与火车的区别是什么?)答案:WKH WHDFKHU VDBV “QR JXP DOORZHG”WKH WUDLQ VDBV “FKHZ FKHZ”实验二移动4位的凯撒密码:1.请解密下面伊薇写给艾比的便条,她使用的是移动4位的凯撒密码WSVVC PIX’W YWI GMTLIVW JVSQ RSA SR2.谜语:What do you call a dog at the beach ?(你怎么称呼一只在海滩上的狗?)答案(移动4位密码):E LSX HSK实验三凯撒密码破解:1.凯撒密码破解密文:NGBKGMUUJZOSK实验四用数传递信息的方法破译以下的谜语:1.谜语:Where does Thursday come before Wednesday? (哪裡的星期四是比星期三还早的?)答案: 8,13,19,7,4,3,8,2,19,8,14,13,0,17,242.谜语:What always ends everything?(什么总是能终结所有事情?)答案:19,7,4 11,4,19,19,4,17 ,6四、实验总结通过上机实践,对所学内容的某个知识点有了更深入的理解,写出一些体会、学习心得,甚至是改进意见。

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

凯撒加密实验报告(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. 加密效果通过实验验证,凯撒加密法能够有效地将明文转换为密文,且解密过程也能够将密文恢复为明文。

凯撒密码实验步骤

凯撒密码实验步骤

实验步骤:本练习将主机A和B作为一组,主机C和D作为一组,主机E和F作为一组。

首先使用“快照X”恢复Windows系统环境。

一.手动完成Kaiser密码(1)在实验原理部分我们已经了解了Kaiser密码的基本原理,那么请同学们写出当密钥k=3时,对应明文:data security has evolved rapidly的密文:_____________________________。

(2)进入实验平台,单击工具栏中的“工具箱”按钮,打开实验工具箱,在向导区点击“Kaiser密码”。

在明文输入区输入明文:data security has evolved rapidly。

将密钥k调节到3,查看相应的密文,并与你手动加密的密文进行比较。

请根据密钥验证密文与明文对应关系是否正确。

二.Kaiser加密(1)本机进入“工具箱”|“加密解密”|“Kaiser密码”,在明文输入区输入明文(明文应为英文),单击“加密”按钮进行加密。

请将明文记录在这里:_____________________________。

(2)调节密钥k的微调按钮或者对照表的移位按钮,选择合适的密钥k值,并记下该密钥k值以用于同组主机的解密。

加密工作完成后,单击“导出”按钮将密文默认导出到Kaiser共享文件夹(D:\Work\Encryption\Kaiser\)中,默认文件名为Kaiser密文.txt。

(3)通知同组主机接收密文,并将密钥k通告给同组主机。

(4)单击“导入”按钮,从共享文件夹中将同组主机的密文导入(即在文件名输入框中填写:\\同组主机IP\Work\Encryption\Kaiser\Kaiser密文.txt)。

(5)调节密钥k的微调按钮或者对照表的移位按钮将k设为同组主机加密时的密钥k值,这时解密已经成功。

请将明文写出:_________。

(6)主机B将解密后的明文与主机A记录的明文比较,请对比明文是否相同。

三.Kaiser密码分析(1)本机进入“工具箱”|“加密解密”|“Kaiser密码”,在明文输入区输入明文(要求明文有一定的意义以便让同组主机分析)。

凯撒加密解密实验报告

凯撒加密解密实验报告

《C语言课程设计》任务书所属学期:10-11-2 下达时间:2011年8月28日完成班级: D软件101【设计目的】本课程设计是计算机科学与技术专业重要的实践性环节之一,是在学生学习完《C语言程序设计》课程后进行的一次全面的综合练习。

本课程设计的目的和任务:(1)巩固和加深学生对C语言的基本知识的理解和掌握;(2)掌握C语言编程和程序调试的基本技能;(3)利用C语言进行简单软件设计的基本思路和方法;(4)提高运用C语言解决实际问题的能力;(5)掌握书写程序设计说明文档的能力。

【设计内容与任务】每个学生在教师提供的课程设计题目中任意选择一题,独立完成,题目选定后不可更换。

1、以本班同学的具体数据为背景,设计一个本班同学通讯录。

实现功能:1) 通讯录编辑(添加、删除)。

2) 按不同的项进行查找。

3) 对已存在的通讯录按不同的项排序。

4) 将通讯录写入文件5) 从文件读入通讯录备注:通讯录至少应该有以下数据项:姓名,地址,电话,邮编,E-mail,QQ。

2、设计一个学生成绩排名系统,该系统的主要功能如下:1) 具备对成绩的管理功能(添加、删除、排序)2) 具备对成绩的统计功能(最高分,最低分,平均分,及格率等)3) 具备按学号、姓名、或课程名查询成绩的功能。

备注:成绩记录以下信息:班级,学号,姓名,课程名,成绩(百分制)。

可以用能表示学生成绩的结构体数组存储数据。

3、设计一个文件加密/解密程序,主要功能是支持简单的替换加密/解密,支持凯撒加密法(参见百度百科词条:凯撒加密法/view/4107346.htm)和ROT13加密两种加密方法。

4、设计一个简单的文件压缩/解压缩程序,例如:未压缩前的字符为"aaaccccddddd666666",则压缩以后的字符为:"3a4c5d66"。

压缩文件时需要输出压缩比,如20%。

5、设计一个万年历程序。

主要功能是能够输出任意年份或月份的日历,程序的输出的月历格式与日常生活中使用的月历格式相同,最好能够支持通过命令行参数指定要输出的年份或月份。

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

计算机安全基础上机实验报告学院年级专业班学生姓名学生学号实验一凯撒加密解密凯撒密码简介:恺撒密码的替换方法是通过排列明文和密文字母表,密文字母表示通过将明文字母表向左或向右移动一个固定数目的位置。

例如,当偏移量是左移3的时候(解密时的密钥就是3):明文字母表:ABCDEFGHIJKLMNOPQRSTUVWXYZ 密文字母表:DEFGHIJKLMNOPQRSTUVWXYZABC使用时,加密者查找明文字母表中需要加密的消息中的每一个字母所在位置,并且写下密文字母表中对应的字母。

需要解密的人则根据事先已知的密钥反过来操作,得到原来的明文。

例如:明文:THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG 密文:WKH TXLFN EURZQ IRA MXPSV RYHU WKH ODCB GRJ源代码:#include "kaisa.h"using namespace std;void Kaisa::setI(){cout << "\n请输入加密密码:";cin >> i;}void Kaisa::jiami(){char a, b, c;cout << "\n请输入明文:\t";cin >> a;b = char('z' - i%26);c = char('Z' - i%26);cout << "\n密文是:\t";while(a != '\n'){if((a <= 'z' && a >= 'a') || ( a <= 'Z' && a >='A')){ if((a <= b && a >= 'a') || ( a <= c && a >='A'))cout << char(a + i%26);if(a > c && a <= 'Z')cout << char(a + i%26 - 26);if(a > b && a <= 'z')cout << char(a + i%26 - 26);if(a == ' ')cout << " ";}elsecout << a;a = cin.get();}cout << endl;}void Kaisa::setX(){cout << "\n请输入解密密码:";cin >> i;}void Kaisa::jiemi(){char a, b, c;cout << "\n请输入密文:\t";cin >> a;b = char('a' + i%26);c = char('A' + i%26);cout << "\n明文是:\t";while(a != '\n'){if((a <= 'z' && a >= 'a') || ( a <= 'Z' && a >='A')) { if((a <= 'z' && a >= b) || ( a <= 'Z' && a >= c)) cout << char(a - i%26);if(a >= 'a' && a < b)cout << char(a - i%26 + 26);if(a >= 'A' && a < c)cout << char(a - i%26 + 26);if(a == ' ')cout << " ";}elsecout << a;a = cin.get();}cout << endl;}int main(){while(1){int t;cout << "1.加密" << endl<< "2.解密" << endl<<"按其他键退出"<<endl<< "选择:";cin >> t;Kaisa kaisa;if(t == 1){kaisa.setI();kaisa.jiami();cout<<"加密完成\n"<<endl;}else if(t == 2){kaisa.setX();kaisa.jiemi();cout<<"解密完成\n"<<endl;}elsereturn 0;}}测试:密钥:4,明文:abcdefg 实验结果:实验二DES加密解密加密原理:DES 使用一个56 位的密钥以及附加的8 位奇偶校验位,产生最大64 位的分组大小。

这是一个迭代的分组密码,使用称为Feistel 的技术,其中将加密的文本块分成两半。

使用子密钥对其中一半应用循环功能,然后将输出与另一半进行“异或”运算;接着交换这两半,这一过程会继续下去,但最后一个循环不交换。

DES 使用16 个循环,使用异或,置换,代换,移位操作四种基本运算。

源代码:#include<stdio.h>#include<string.h>#include"des_encode.h"int key[16][48];char str[8];void main(){EncodeMain();}void EncodeMain(){int i;char keychar[8];int key2[8];int strkey[8];printf("请输入8个要加密的字符:\n");for(i=0;i<8;i++)scanf("%c",&str[i]);getchar();for(i=0;i<8;i++)strkey[i]=str[i];printf("\n输入明文的十六进制为:\n");for(i=0;i<8;i++)printf("%10x",strkey[i]);printf("\n请输入密钥(8个字符):\n");for(i=0;i<8;i++)scanf("%c",&keychar[i]);for(i=0;i<8;i++)key2[i]=keychar[i];getchar();Encode(strkey,key2);printf("\n加密后十六进制密文是:\n");for(i=0;i<8;i++)printf("%10x",strkey[i]);printf("\n\n请输入解密密码\n");for(i=0;i<8;i++)scanf("%c",&keychar[i]);for(i=0;i<8;i++)key2[i]=keychar[i];Decode(strkey,key2);for(i=0;i<8;i++)printf("%10x",strkey[i]);for(i=0;i<8;i++)str[i]=strkey[i];printf("\n明文为:\t");for(i=0;i<8;i++)printf("%c",str[i]);printf("\n\n");}void keyBuild(int *keychar){int i,j;int movebit[]={1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1};int midkey2[56];int midkey[64];StrtoBin(midkey,keychar);for(i=0;i<56;i++)midkey2[i]=midkey[PC1[i]-1];for(i=0;i<16;i++)keyCreate(midkey2,movebit[i],i);}void StrtoBin(int *midkey,int *keychar){int trans[8],i,j,k,n;n=0;for(i=0;i<8;i++){j=0;while(keychar[i]!=0){trans[j]=keychar[i]%2;keychar[i]=keychar[i]/2;j++;}for(k=j;k<8;k++)trans[k]=0;for(k=0;k<8;k++)midkey[n++]=trans[7-k];}}void keyCreate(int *midkey2,int movebit,int n){ int i,temp[4];temp[0]=midkey2[0];temp[1]=midkey2[1];temp[2]=midkey2[28];temp[3]=midkey2[29];if(movebit==2){for(i=0;i<26;i++){midkey2[i]=midkey2[i+2];midkey2[i+28]=midkey2[i+30];}midkey2[26]=temp[0];midkey2[27]=temp[1];midkey2[54]=temp[2];midkey2[55]=temp[3]; }else{ for(i=0;i<27;i++){midkey2[i]=midkey2[i+1];midkey2[i+28]=midkey2[i+29];}midkey2[27]=temp[0];midkey2[55]=temp[2];}for(i=0;i<48;i++)key[n][i]=midkey2[PC2[i]-1];}void EncodeData(int *lData,int *rData,int *str){int i,j,temp[8],lint,rint;int data[64];lint=0,rint=0;for(i=0;i<4;i++){j=0;while(str[i]!=0){temp[j]=str[i]%2;str[i]=str[i]/2;j++;}while(j<8)temp[j++]=0;for(j=0;j<8;j++)lData[lint++]=temp[7-j];j=0;while(str[i+4]!=0){temp[j]=str[i+4]%2;str[i+4]=str[i+4]/2;j++;}while(j<8)temp[j++]=0;for(j=0;j<8;j++)rData[rint++]=temp[7-j];}for(i=0;i<32;i++){data[i]=lData[i];data[i+32]=rData[i];}for(i=0;i<32;i++){lData[i]=data[IP1[i]-1];rData[i]=data[IP1[i+32]-1];}}void F(int *rData,int *key){int i,rDataP[48];Expand(rData,rDataP);for(i=0;i<48;i++){rDataP[i]=rDataP[i]^key[i];}ExchangeS(rDataP,rData);ExchangeP(rData);}void Expand(int *rData,int *rDataP){int i;for(i=0;i<48;i++)rDataP[i]=rData[Ex[i]-1];}void ExchangeS(int *rDataP,int *rData){int i,n,linex,liney;linex=liney=0;for(i=0;i<48;i+=6){n=i/6;linex=(rDataP[i]<<1)+rDataP[i+5];liney=(rDataP[i+1]<<3)+(rDataP[i+2]<<2)+(rDataP[i+3]<<1)+rDataP[i+4];FillBin(rData,n,s[n][linex][liney]);}}void ExchangeP(int *rData){int i,temp[32];for(i=0;i<32;i++)for(i=0;i<32;i++)rData[i]=temp[P[i]-1];}void FillBin(int *rData,int n,int s){int temp[4],i;for(i=0;i<4;i++){temp[i]=s%2;s=s/2;}for(i=0;i<4;i++)rData[n*4+i]=temp[3-i];}void DecodeData(int *str,int *lData,int *rData){ int i;int a,b;int data[64];a=0,b=0;for(i=0;i<32;i++){data[i]=lData[i];data[i+32]=rData[i];}for(i=0;i<32;i++){lData[i]=data[IP2[i]-1];rData[i]=data[IP2[i+32]-1];}for(i=0;i<32;i++){a=(lData[i]&0x1)+(a<<1);b=(rData[i]&0x1)+(b<<1);if((i+1)%8==0){str[i/8]=a;a=0;str[i/8+4]=b;b=0;}}}void Encode(int *str,int *keychar){int lData[32],rData[32],temp[32],rDataP[48];int i,j;keyBuild(keychar);EncodeData(lData,rData,str);for(i=0;i<16;i++){for(j=0;j<32;j++)F(rData,key[i]);for(j=0;j<32;j++){rData[j]=rData[j]^lData[j];}for(j=0;j<32;j++)lData[j]=temp[j];}DecodeData(str,rData,lData);}void Decode(int *str,int *keychar){int lData[32],rData[32],temp[32],rDataP[48];int i,j;keyBuild(keychar);EncodeData(lData,rData,str);for(i=0;i<16;i++){for(j=0;j<32;j++)temp[j]=rData[j];F(rData,key[15-i]);for(j=0;j<32;j++){rData[j]=rData[j]^lData[j];}for(j=0;j<32;j++){lData[j]=temp[j];}}DecodeData(str,rData,lData);}des_encode.hvoid EncodeMain();void DecodeMain();void Decode(int *str,int *keychar);void Encode(int *str,int *keychar);void keyBuild(int *keychar);void StrtoBin(int *midkey,int *keychar);void keyCreate(int *midkey2,int movebit,int i); void EncodeData(int *lData,int *rData,int *srt); void F(int *rData,int *key);void Expand(int *rData,int *rDataP);void ExchangeS(int *rDataP,int *rData);void ExchangeP(int *rData);void FillBin(int *rData,int n,int s);void DecodeData(int *str,int *lData,int *rData);int IP1[]={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, };int IP2[]={40, 8, 48, 16, 56, 24, 64, 32, 39, 7, 47, 15, 55, 23, 63, 31,38, 6, 46, 14, 54, 22, 62, 30, 37, 5, 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 };int s[][4][16]={{{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,12,9,7,3,10,5,0},{15,12,8,2,4,9,1,7,5,11,3,14,10,0,6,13}},{{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}},{{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,15,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}},{{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}},{{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,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,3}},{{12,1,10,15,9,2,6,8,0,13,3,4,14,7,5,11},{10,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,13}},{{4,11,2,14,15,0,8,13,3,12,9,7,5,10,6,1},{13,0,11,7,4,9,1,10,14,3,5,12,2,15,8,6},{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}},{{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}}};int Ex[48]={ 32,1,2,3,4,5,4,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};int P[32]={16,7,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};int PC1[56]={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,33,15,7,62,54,46,38,30,22,14,6,61,53,45,37,29,21,13,5,28,20,12,4};int PC2[48]={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};测试:明文:qwertyui,密钥:12345678 结果:实验三RSA加密解密RSA简介:公钥和私钥的产生假设Alice想要通过一个不可靠的媒体接收Bob的一条私人讯息。

相关文档
最新文档