天天看點

凱撒密碼的加密解密算法實作

用C++實作凱撒密碼的加密解密算法

在密碼學中,恺撒密碼(英語:Caesar cipher),或稱恺撒加密、恺撒變換、變換加密,是一種最簡單且最廣為人知的加密技術。

它是一種替換加密的技術,明文中的所有字母都在字母表上向後(或向前)按照一個固定數目進行偏移後被替換成密文。

例如,當偏移量是3的時候,所有的字母A将被替換成D,B變成E,以此類推。這個加密方法是以羅馬共和時期恺撒的名字命名的,當年恺撒曾用此方法與其将軍們進行聯系。

主要注意字元的轉換

凱撒密碼的加密解密算法實作
#include<iostream>
#include<stdio.h>
#include<string.h>
#define N=100
using namespace std;
int main()
{
    char str[100];
    int choose;//選擇加密解密
    int k;//每次移動的位數
    cout<<"輸入密鑰:";
    cin>>k;
    do
    {
        cout<<"請輸入選擇:1為加密,2為解密:";
        cin>>choose;
        if(choose==1)
        {
            cout<<"輸入需要加密的明文:";
            cin>>str;
            for(int i=0;i<strlen(str);i++)
            {
                if(str[i]>='a'&&str[i]<='z')
                    str[i]=((str[i]-'a'+k)%26+'a');
                else if(str[i]>='A'&&str[i]<='Z')
                    str[i]=((str[i]-'A'+k)%26+'A');
            }
            cout<<str;
        }
        else if(choose==2)
        {
            cout<<"輸入需要解密的密文:";
            cin>>str;
            for(int i=0;i<strlen(str);i++)
            {
                if(str[i]>='a'&&str[i]<='z')
                    str[i]=((str[i]-'a'+26-k)%26+'a');
                else if(str[i]>='A'&&str[i]<='Z')
                    str[i]=((str[i]-'A'+26-k)%26+'A');
            }
            cout<<str;
        }
        else if(choose!=1&&choose!=2)
            cout<<"ERROR";
    }while(choose!=1&&choose!=2);
    return 0;
    }