维吉尼亚密码加密解密

加密方法:

在维吉尼亚密码中,发件人和收件人必须使用同一个关键词(或同一段字母),这个关键词告诉他们怎么样才能前后改变字母的位置来获得该段信息中的每个字母的正确对应位置。比如:如果关键字为“BIG”,发件人将把明文中的第一个字母按“B”行来加密(向后移动1个位置,因为B是排在A后面的第1个字母),明文中的第二个字母按“I”行来加密(向后移动8个位置,因为I是排在A后面的第8个字母),明文中的第三个字母按“G”行加密(向后移动6个位置,因为G是排在A后面的第6个位置),后面再循环操作即可完成加密任务。

例如:明文:THE BUTCHER THE BAKER AND THE CANDLESTICK MAKER。

关键密钥:BIG

加密文字:UPK CCZDPKS BNF JGLMX BVJ UPK DITETKTBODS SBSKS

再例如:关键词:FOREST

明文:bettertodowellthantosaywell

密文:GSKXWKYCUSOXQZKLSGYCJEQPJZC

加密程序:

//k为加密关键词
string encrypt(string mingwen,string k)
{
    string miwen = "";
    int cont = 0;
    int len = k.length(); //len为加密关键字的长度
    for(int i=0; i<mingwen.length(); i++)
    {
        if(mingwen[i]<'a'||mingwen[i]>'z')
        {
            miwen+=mingwen[i];
            cont++;
        }
        else
        {
            int j = (i-cont) % len;
            int n = k[j]-'a';
            miwen += ((mingwen[i]-'a'+n)%26+'a');
        }
    }
    return miwen;
}

解密和加密过程相反。

解密程序:

string decrypt(string miwen,string k)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           
{
    string mingwen = "";
    int cont = 0;
    int len = k.length();  //len为加密关键字的长度
    for(int i=0; i<miwen.length(); i++)
    {
        if(miwen[i]<'a'||miwen[i]>'z')
        {
            mingwen+=miwen[i];
            cont++;
        }
        else
        {
            int j = (i-cont) % len;
            int n = k[j]-'a';
            mingwen += (miwen[i]-'a'+26-n)%26+'a';
        }
    }
    return mingwen;
}

完整程序:

#include<bits/stdc++.h>
using namespace std;
//重合指数接近0.65,用于确定秘钥长度
string encrypt(string mingwen,string k);
string decrypt(string miwen,string k);
int main()
{
    int i;
    string k="";   //加密关键字
    string s;
    ifstream fin("in.txt");
    ofstream fout("out.txt");
    cout<<"输入小写加密关键字:";
    cin>>k;
    cout<<"选择操作(1:加密 2:解密):";
    cin>>i;

    switch(i)
    {
    case 1:
    {
        while(getline(fin,s))
        {
            fout<<encrypt(s,k)<<endl;
        }
        fin.close();
        fout.close();
    }
    break;

    case 2:
    {
        while(getline(fin,s))
        {
            fout<<decrypt(s,k)<<endl;
        }
        fin.close();
        fout.close();
    }
    break;

    default:
        cout<<"输入不合法"<<endl;
        break;
    }

    return 0;
}

//加密
string encrypt(string mingwen,string k)
{
    string miwen = "";
    int cont = 0;
    int len = k.length(); //len为加密关键字的长度
    for(int i=0; i<mingwen.length(); i++)
    {
        if(mingwen[i]<'a'||mingwen[i]>'z')
        {
            miwen+=mingwen[i];
            cont++;
        }
        else
        {
            int j = (i-cont) % len;
            int n = k[j]-'a';
            miwen += ((mingwen[i]-'a'+n)%26+'a');
        }
    }
    return miwen;
}

//解密

string decrypt(string miwen,string k)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           n,string k)
{
    string mingwen = "";
    int cont = 0;
    int len = k.length();  //len为加密关键字的长度
    for(int i=0; i<miwen.length(); i++)
    {
        if(miwen[i]<'a'||miwen[i]>'z')
        {
            mingwen+=miwen[i];
            cont++;
        }
        else
        {
            int j = (i-cont) % len;
            int n = k[j]-'a';
            mingwen += (miwen[i]-'a'+26-n)%26+'a';
        }
    }
    return mingwen;
}

 

    原文作者:维吉尼亚加密问题
    原文地址: https://blog.csdn.net/qq_37523868/article/details/82499455
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞