实验二 凯撒密码密码算法与编程
- 格式:ppt
- 大小:752.00 KB
- 文档页数:5
凯撒密码算法编程实现凯撒密码是一种经典的加密算法,它通过将明文中的每个字符在字母表中向前或向后移动固定的位数来实现加密。
下面是使用 Python 语言实现凯撒密码算法的示例代码:```pythondef Caesar CipherEncryptDecrypt(message, shift):encryptedMessage = ""# 遍历 message 中的每个字符for char in message:# 判断字符是否为字母if char.isalpha():ascii_offset = ord('a') if char.islower() else ord('A')encryptedChar = chr((ord(char) - ascii_offset + shift) % 26 + ascii_offset)encryptedMessage += encryptedCharelse:encryptedMessage += charreturn encryptedMessage# 测试代码message = "Hello, World!"shift = 3print("原始消息:", message)encryptedMessage = CaesarCipherEncryptDecrypt(message, shift)print("加密后的消息:", encryptedMessage)decryptedMessage = CaesarCipherEncryptDecrypt(encryptedMessage, -shift)print("解密后的消息:", decryptedMessage)```在上述示例代码中,我们定义了一个名为 `CaesarCipherEncryptDecrypt` 的函数,它接受一个字符串 `message` 和一个整数 `shift` 作为参数,并返回加密或解密后的消息。
凯撒密码算法它是一种代换密码。
据说恺撒是率先使用加密函的古代将领之一,因此这种加密方法被称为恺撒密码。
凯撒密码作为一种最为古老的对称加密体制,在古罗马的时候都已经很流行,他的基本思想是:通过把字母移动一定的位数来实现加密和解密。
明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。
例如,当偏移量是3的时候,所有的字母A 将被替换成D,B变成E,以此类推X将变成A,Y变成B,Z变成C。
由此可见,位数就是凯撒密码加密和解密的密钥。
1概念在密码学中,恺撒密码(或称恺撒加密、恺撒变换、变换加密)是一种最简单且最广为人知的加密技术。
它是一种替换加密的技术。
这个加密方法是以恺撒的名字命名的,当年恺撒曾用此方法与其将军们进行联系。
恺撒密码通常被作为其他更复杂的加密方法中的一个步骤,例如维吉尼亚密码。
恺撒密码还在现代的ROT13系统中被应用。
但是和所有的利用字母表进行替换的加密技术一样,恺撒密码非常容易被破解,而且在实际应用中也无法保证通信安全。
2原理密码的使用最早可以追溯到古罗马时期,《高卢战记》有描述恺撒曾经使用密码来传递信息,即所谓的“恺撒密码”,它是一种替代密码,通过将字母按顺序推后起3位起到加密作用,如将字母A换作字母D,将字母B换作字母E。
因据说恺撒是率先使用加密函的古代将领之一,因此这种加密方法被称为恺撒密码。
这是一种简单的加密方法,这种密码的密度是很低的,只需简单地统计字频就可以破译。
现今又叫“移位密码”,只不过移动的位数不一定是3位而已。
密码术可以大致分为两种,即移位和替换,当然也有两者结合的更复杂的方法。
在移位中字母不变,位置改变;替换中字母改变,位置不变。
将替换密码用于军事用途的第一个文件记载是恺撒著的《高卢记》。
恺撒描述了他如何将密信送到正处在被围困、濒临投降的西塞罗。
其中罗马字母被替换成希腊字母使得敌人根本无法看懂信息。
苏托尼厄斯在公元二世纪写的《恺撒传》中对恺撒用过的其中一种替换密码作了详细的描写。
凯撒密码(Caesar Cipher)是一种最简单且最广为人知的加密技术之一。
它是一种替换密码,其中每个字母在原文中被偏移、移动固定的位置。
以下是一个使用C语言实现凯撒密码的示例:c#include <stdio.h>#include <string.h>void caesar_encrypt(char* plaintext, int shift) {char ciphertext[strlen(plaintext)];for (int i = 0; i < strlen(plaintext); i++) {char c = plaintext[i];if (c >= 'a' && c <= 'z') {ciphertext[i] = (c - 'a' + shift) % 26 + 'a';} else if (c >= 'A' && c <= 'Z') {ciphertext[i] = (c - 'A' + shift) % 26 + 'A';} else {ciphertext[i] = c;}}ciphertext[strlen(plaintext)] = '\0'; // Null-terminate the stringprintf("Ciphertext: %s\n", ciphertext);}int main() {char plaintext[100];int shift;printf("Enter the plaintext to be encrypted: ");fgets(plaintext, sizeof(plaintext), stdin); // Read plaintext from stdin plaintext[strcspn(plaintext, "\n")] = 0; // Remove newline character from inputprintf("Enter the shift value: ");scanf("%d", &shift); // Read shift value from stdincaesar_encrypt(plaintext, shift); // Encrypt the plaintext using the Caesar cipherreturn 0;}这个程序首先定义了一个名为caesar_encrypt的函数,它接受一个明文字符串和一个偏移量作为输入,然后生成并打印出相应的密文。
凯撒密码的实验报告一、实验目的通过实验熟练掌握凯撒密码算法,学会凯撒密码算法程序设计。
二、实验环境软件工具:Visual C++ 6.0操作系统:windows xp三、实验思想在密码学中存在着各种各样的置换方式,但所有不同的置换方式都包含2个相同的元素。
密钥和协议(算法)。
凯撒密码的密钥是3,算法是将普通字母表中的字母用密钥对应的字母替换。
置换加密的优点就在于它易于实施却难于破解. 发送方和接收方很容易事先商量好一个密钥,然后通过密钥从明文中生成密文,即是敌人若获取密文,通过密文直接猜测其代表的意义,在实践中是不可能的。
凯撒密码的加密算法极其简单。
其加密过程如下:在这里,我们做此约定:明文记为m,密文记为c,加密变换记为E(k1,m)(其中k1为密钥),解密变换记为D(k2,m)(k2为解密密钥)(在这里不妨假设k1=k2,记为k)。
凯撒密码的加密过程可记为如下一个变换:c?m+k mod n (其中n为基本字符个数) 同样,解密过程可表示为:m?c+k mod n (其中n为基本字符个数)四、实验数据(源代码)#include<stdio.h>#include<string.h>#include<stdlib.h>void ENC(char str[],int n){char c;int i = 0;while(str[i]){c=str[i];if(c>='a'&&c<='z')if(c+n%26<='z')str[i]=(char)(c+n%26);elsestr[i]=(char)('a'+((n-('z'-c)-1)%26));else if(c>='A'&&c<='Z')if(c+n%26<='Z')str[i]=(char)(c+n%26);elsestr[i]=(char)('A'+((n-('Z'-c)-1)%26));elsestr[i]=c;i++;}printf("\n密文:");puts(str);}void DEC(char str[],int n){char c;int i = 0;while(str[i]){c=str[i];if(c>='a'&&c<='z')if(c-n%26>='a')str[i]=(char)(c-n%26);elsestr[i]=(char)('z'-(n-(c-'a')-1)%26);else if(c>='A'&&c<='Z')if(c-n%26>='A')str[i]=(char)(c-n%26);elsestr[i]=(char)('Z'-(n-(c-'A')-1)%26);elsestr[i]=c;i++;}printf("\n明文:");puts(str);}int main(){int k=0;char str[100]={0};int n=0,i=1;printf("please input strings.\n");gets(str);printf("you input:\n");puts(str);printf("Please input number:\n");scanf("%d",&n);printf("1:Encryption\n");printf("2:Decryption\n");printf("3:EXIT\n");printf("Please choose:\n");scanf("%d",&k);switch(k){case 1:ENC(str,n);case 2:DEC(str,n);case 3:exit(0);}}五、实验结果。
实验步骤:本练习将主机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++凯撒密码编程C++ 是一种流行的编程语言,可以用于实现凯撒密码加密和解密算法。
凯撒密码是一种简单的替换密码,通过将字母按照一定的偏移量进行替换来实现加密和解密。
下面是一个用 C++ 编写的凯撒密码加密和解密的示例代码:```cpp。
#include <iostream>。
#include <string>。
std::string caesarEncrypt(std::string message, int key) {。
std::string encryptedMessage = "";。
for (char& c : message) {。
if (isalpha(c)) {。
char base = isupper(c) ? 'A' : 'a';。
c = (c - base + key) % 26 + base;。
}。
encryptedMessage += c;。
}。
return encryptedMessage;。
}。
std::string caesarDecrypt(std::string message, int key) {。
return caesarEncrypt(message, 26 - key);。
}。
int main() {。
std::string message = "Hello, World!";。
int key = 3;。
std::string encryptedMessage = caesarEncrypt(message, key);。
std::cout << "Encrypted message: " << encryptedMessage << std::endl;。
std::string decryptedMessage = caesarDecrypt(encryptedMessage, key);。
凯撒密码的算法c语言凯撒密码是一种非常古老的加密方法,相传当年凯撒大地行军打仗时为了保证自己的命令不被敌军知道,就使用这种特殊的方法进行通信,以确保信息传递的安全。
他的原理很简单,说到底就是字母于字母之间的替换。
下面让我们看一个简单的例子:“baidu”用凯撒密码法加密后字符串变为“edlgx”,它的原理是什么呢,把“baidu”中的每一个字母按字母表顺序向后移3位,所得的结果就是刚才我们所看到的密文。
#include <stdio.h>main(){char M[100];char C[100];int K=3,i;printf("请输入明文M(注意不要输入空白串)\n");gets(M);for(i=0;M[i]!='\0';i++)C[i]=(M[i]-'a'+K)%26+'a';C[i]='\0';printf("结果是:\n%s\n",C);}1、程序结构化,用函数分别实现2、对文件的加密,解密输出到文件#include<stdio.h>#include<conio.h>void menu()/*菜单,1.加密 2.解密 3.退出*/{clrscr();printf("\n========================================================== =====================");printf("\n1.Encrypt the file"); printf("\n2.Decrypt the file"); printf("\n3.Quit\n");printf("============================================================ ===================\n");printf("Please select a item:"); return;}char encrypt(char ch,int n)/*加密函数,把字符向右循环移位n*/ { while(ch>='A'&&ch<='Z'){return ('A'+(ch-'A'+n)%26); }while(ch>='a'&&ch<='z'){return ('a'+(ch-'a'+n)%26); }return ch;}main(){int i,n;char ch0,ch1;FILE *in,*out;char infile[10],outfile[10]; textbackground(RED);textcolor(LIGHTGREEN);clrscr();menu();ch0=getch();while(ch0!='3'){if(ch0=='1'){clrscr();printf("\nPlease input the infile:");scanf("%s",infile);/*输入需要加密的文件名*/ if((in=fopen(infile,"r"))==NULL){printf("Can not open the infile!\n");printf("Press any key to exit!\n");getch();exit(0);}printf("Please input the key:");scanf("%d",&n);/*输入加密密码*/printf("Please input the outfile:");scanf("%s",outfile);/*输入加密后文件的文件名*/ if((out=fopen(outfile,"w"))==NULL){printf("Can not open the outfile!\n");printf("Press any key to exit!\n");fclose(in);getch();exit(0);}while(!feof(in))/*加密*/{fputc(encrypt(fgetc(in),n),out);}printf("\nEncrypt is over!\n");fclose(in);fclose(out);sleep(1);}if(ch0=='2'){clrscr();printf("\nPlease input the infile:");scanf("%s",infile);/*输入需要解密的文件名*/if((in=fopen(infile,"r"))==NULL){printf("Can not open the infile!\n");printf("Press any key to exit!\n");getch();exit(0);}printf("Please input the key:");scanf("%d",&n);/*输入解密密码(可以为加密时候的密码)*/ n=26-n;printf("Please input the outfile:");scanf("%s",outfile);/*输入解密后文件的文件名*/if((out=fopen(outfile,"w"))==NULL){printf("Can not open the outfile!\n");printf("Press any key to exit!\n");fclose(in);getch();exit(0);}while(!feof(in)){fputc(encrypt(fgetc(in),n),out); }printf("\nDecrypt is over!\n"); fclose(in);fclose(out);sleep(1);}clrscr();printf("\nGood Bye!\n"); sleep(3); getch();}}。
凯撒密码的实验报告凯撒密码是一种最简单的密码,它可以通过将明文中的每个字母按照一定规律进行向后移动来加密。
本实验旨在通过实践了解凯撒密码的加密原理,并了解加密算法的基础理论和安全性。
一、实验原理:凯撒密码是一种替换密码,通过对明文中的每个字母进行加密,从而得到一串密文。
例如:将明文“hello”向后移动三个字符变成了“khoor”。
通常情况下,加密方法包括两个参数:第一个参数表示移动的距离,第二个参数表示明文。
例如,对于明文“To be or not to be, that is the question.”,加密时选择移动三个字符,就可以得到如下密文:Wr eh ru qrw wr eh, wkhqwlv wkh txhvwlrq.解密方法与加密方法相反,只需要按照相同的规律向前移动即可。
二、实验步骤:1、设置加密距离在开始加密之前,先设置加密距离。
假设选择向后移动3个字符为例。
2、输入明文选择明文“hello world”。
3、加密按照设定的加密距离将字母进行移动,得到密文“khoor zruog”。
4、解密对于密文“khoor zruog”,按照与加密相反的规律向前移动三个字符即可解密,得到明文“hello world”。
三、实验结果:通过以上实验步骤,我们得到了以下结果:明文:"hello world"加密距离:3密文:"khoor zruog"解密密文:"hello world"通过本实验的实践,我们了解到凯撒密码是一种简单而古老的加密方法,可以用来将一段明文转换成一段密文。
但是凯撒密码非常容易被破解,因为只有26种可能的加密方式,可以通过猜测或暴力破解得到正确的明文。
因此,在实际应用中,凯撒密码不太适合作为加密工具。
更为安全的密码应该采用更加复杂的密码学算法,并且每次加密时加入随机性来提高安全性。
第1篇一、实验目的1. 理解凯撒密码的基本原理和加密解密过程;2. 掌握C语言编程实现凯撒密码;3. 提高编程能力和密码学基础知识。
二、实验环境1. 软件工具:Visual Studio 20192. 操作系统:Windows 10三、实验内容1. 凯撒密码原理介绍凯撒密码是一种最简单的移位密码,通过将字母表中的每个字母向前或向后移动固定数量位置来进行加密和解密。
例如,密钥为3时,A会被加密为D,B会被加密为E,以此类推。
解密过程是将密文中的每个字母向前或向后移动相同的位数,恢复出明文。
2. C语言实现凯撒密码(1)加密函数```cvoid caesar_encrypt(char input, char output, int key) {int i = 0;while (input[i] != '\0') {if (input[i] >= 'A' && input[i] <= 'Z') {output[i] = ((input[i] - 'A' + key) % 26) + 'A';} else if (input[i] >= 'a' && input[i] <= 'z') {output[i] = ((input[i] - 'a' + key) % 26) + 'a';} else {output[i] = input[i];}i++;}output[i] = '\0';}```(2)解密函数```cvoid caesar_decrypt(char input, char output, int key) {int i = 0;while (input[i] != '\0') {if (input[i] >= 'A' && input[i] <= 'Z') {output[i] = ((input[i] - 'A' - key + 26) % 26) + 'A'; } else if (input[i] >= 'a' && input[i] <= 'z') {output[i] = ((input[i] - 'a' - key + 26) % 26) + 'a'; } else {output[i] = input[i];}i++;}output[i] = '\0';}```3. 测试程序```cinclude <stdio.h>include <string.h>void caesar_encrypt(char input, char output, int key) { // 加密函数}void caesar_decrypt(char input, char output, int key) { // 解密函数}int main() {char input[100], output[100];int key;printf("请输入密钥(1-25): ");scanf("%d", &key);printf("请输入明文: ");scanf("%s", input);caesar_encrypt(input, output, key);printf("加密结果: %s\n", output);caesar_decrypt(output, input, key);printf("解密结果: %s\n", input);return 0;}```四、实验结果与分析1. 实验结果(1)输入密钥为3,明文为"hello world",加密结果为"kiho world",解密结果为"hello world";(2)输入密钥为5,明文为"goodbye world",加密结果为"jvvhv world",解密结果为"goodbye world"。