一、实验目的
熟悉古典加密算法,能够编程实现各种常见的加密算法。
二、实验任务
1.编程实现欧几里得算法求最大公因子;
2.编程实现凯撒(Caesar)密码;
3.编程实现仿射密码,置换密码;
4.编程实现扩展欧几里得算法(求逆算法)。
三、参考代码
编写实现古典密码的程序,能对给定的明文或密文进行正确的加密和解密。
(1) 欧几里得算法求最大公因子函数定义
int gcd(int x,int y) {
return (x==0)?y:gcd(y%x, x);
}
(2) 凯撒密码
//凯撒密码实现
#include<iostream>
#include<string>
using namespace std;
int main() {
cout<<"请选择加密(1)或解密(2):";
int n;cin>>n;
cout<<"请输入字符串:";
string str;cin>>str;
cout<<"请输入密钥:";
int k;cin>>k;
if(n==1) {
//加密
for(int i=0;i<str.length();i++) {
if(str[i]>='A'&&str[i]<='Z') {
str[i] = (str[i]-'A'+k)%26+'A';
}
if(str[i]>='a'&&str[i]<='z') {
str[i] = (str[i]-'a'+k)%26+'a';
}
}
cout<<str<<endl;
}
else if(n==2) {
//解密
for(int i=0;i<str.length();i++) {
if(str[i]>='A'&&str[i]<='Z') {
str[i] = (str[i]-'A'-k)%26+'A';
}
if(str[i]>='a'&&str[i]<='z') {
str[i] = (str[i]-'a'-k)%26+'a';
}
}
cout<<str<<endl;
}
else {
cout<<"输入错误!"<<endl;
}
return 0;
}