四種古典密碼的C++實現(4)-----Caesar密碼
//Caesar密碼
/*理解演算法最重要,最好自己動手實現試試看,可以使用MFC寫一個簡單的互動介面*/
#include<iostream>
#include<cmath>
using namespace std;
#define N 1000
//全域性變數
char str[100]; //用於儲存處理前字串
char enstr[100]; //用於儲存處理後字串
int num=0; //用於累計字元數量
char *p; //用於指向處理字串
int key;
//加密
void encryption()
{
while(*p!='\0')
{
*p=(*p-97+key)%26+97;
p++;
}
cout<<"加密後字元:"<<str<<endl<<endl;
}
//解密
void decryption()
{
while(*p!='\0')
{
*p=(*p-71-key)%26+97;
p++;
}
cout<<"解密後字元:"<<str<<endl<<endl;
}
//單文字破解
void get_key()
{
char e;
char d;
cout<<"請輸入已知位置明文:";
cin>>e;
cout<<"請輸入已知位置密文:";
cin>>d;
key=abs(e-d)%26;
cout<<"金鑰為:"<<key<<endl;
}
//全結果破解
void decrypt()
{
char x[N];
cout<<"請輸入加密後的明文:\n";
cin>>x;
for(int i=1;i<=25;++i)
{
for(int j=0;;++j)
{
if(x[j]>96&&x[j]<123)
x[j]=(x[j]-1-122)%26+122;
else if(x[j]>64&&x[j]<91)
x[j]=(x[j]-1-90)%26+90;
else
x[j]=x[j];
if(x[j]==0) break;
}
cout<<"祕鑰為 "<<i<<"時,此祕鑰加密前的原文為:"<<x<<endl;
}
}
//主函式
int main()
{
string ord;
while(1)
{
cout<<"請選擇功能:\n";
cout<<"1.Encryption(加密)\n2.Decryption(解密)\n3.Decipher(破解)\n4.Exit(退出) : ";
p=str;
cin>>ord;
if(ord=="1")
{
cout<<"Input:請輸入需要加密的內容(不支援空格和其他字元)"<<endl;
cin>>str;
p=str;
cout<<"Key:請輸入金鑰 ";
cin>>key;
encryption();
}
else if(ord=="2")
{
cout<<"Input:請輸入需要解密的內容(不支援空格和其他字元):"<<endl;
cin>>str;
p=str;
cout<<"Key:請輸入金鑰 ";
cin>>key;
decryption();
}
else if(ord=="3")
{
cout<<"完全未知密文,輸入明文列出所有可能請輸入 1;\n已知某個明文字母的對應密文請輸入 2;\n";
int choose; cin>>choose;
if(choose==1)
decrypt();
else if(choose==2)
get_key();
}
else if(ord=="4") break;
else
{
cout<<"Error :輸入錯誤,請重新開始\n";
continue;
}
}
return 0;
}
相關文章
- 應用密碼學——古典密碼密碼學
- 古典密碼學 (一)密碼學
- 古典密碼的演化 (一)— 密碼學複習(二)密碼學
- 古典密碼的演化 (二)— 密碼學複習(三)密碼學
- 古典密碼的統計分析密碼
- Python學習——Caesar Cipher密碼破解(加密)方法Python密碼加密
- 修改MySQL密碼的四種方法MySql密碼
- 密碼學課程設計 - 混合密碼的實現密碼學
- 分組密碼(一) — 密碼學複習(四)密碼學
- python實現密碼破解Python密碼
- 現代密碼-公鑰密碼RSA密碼
- 用Abp實現找回密碼和密碼強制過期策略密碼
- 密碼安全:密碼設定要求,密碼爆破辦法,密碼歸類使用,密碼處置方案密碼
- 愷撒密碼Java/Python實現密碼JavaPython
- 【密碼學原理】流密碼和RC4演算法密碼學演算法
- 分組密碼(四)AES演算法① — 密碼學複習(七)演算法密碼學
- 希爾密碼(hill密碼)密碼
- 密碼學與密碼安全:理論與實踐密碼學
- Go 如何實現 PHP 的密碼加密解密GoPHP密碼加密解密
- 《密碼學系列》|| 密碼學中的流密碼是怎麼回事?密碼學
- 實際序列密碼密碼
- flask框架如何實現修改密碼和免密登入功能Flask框架密碼
- 案例四:Shell指令碼生成隨機密碼指令碼隨機密碼
- 序列密碼與分組密碼密碼
- PAT1076 WiFi密碼(java實現)WiFi密碼Java
- C# 實現記住密碼功能C#密碼
- PHP處理密碼的幾種方式PHP密碼
- 一個PHP通用隨機密碼的實現PHP隨機密碼
- PbootCMS忘記密碼後的重置密碼流程boot密碼
- 密碼密碼
- 應用密碼學 - 公鑰密碼密碼學
- 應用密碼學——分組密碼密碼學
- SSH實踐生成密碼密碼
- gitlab實現https及管理員密碼找回GitlabHTTP密碼
- 安卓實現賬號密碼儲存安卓密碼
- Windwos密碼匯出的幾種姿勢密碼
- 3種生成高強度密碼的方法密碼
- 快應用如何實現密碼明文和密文切換顯示密碼
- 密碼管理器進化史(4/4)密碼