如何用c++实现维吉尼亚密码的加密与解密

加密消息为AATACKATDOWN
密匙关键词为LEMON

img

代码如下:


#include <iostream>
#include <string>
using namespace std;
//加密,输入原文、密钥,输出密文
void jiami(char src[],char my[],char mw[])
{
    int i=0,k=0;
    int len= strlen(my);
    while(src[i] != '\0')
    {
        if(src[i]>='a' && src[i]<='z')
        {
            mw[i] = src[i] + my[k]-97;
            if(mw[i] > 122)
                mw[i]-=26;
        }else if(src[i]>='A' && src[i]<='Z')
        {
            mw[i] = src[i] + my[k]-65;
            if(mw[i] > 90)
                mw[i]-=26;
        }
        k = (k+1)%len;
        i++;
    }
    mw[i] = 0;
}

void jiemi(char mw[],char my[],char src[])
{
    int i=0,k=0;
    int len = strlen(my);
    while(mw[i] != '\0')
    {
        if(mw[i]>='a' && mw[i]<='z')
        {
            src[i] = mw[i] + 97 -my[k];
            if(src[i] < 97)
                src[i]+=26;
        }else if(mw[i]>='A' && mw[i]<='Z')
        {
            src[i] = mw[i]-my[k]+65;
            if(src[i] < 65)
                src[i]+=26;
        }
        k = (k+1)%len;
        i++;
    }
    src[i]=0;
}

int main()
{
    char src[]="AATACKATDOWN";
    char my[]="LEMON";
    char mw[100]={0};
    char hy[100]={0};
    jiami(src,my,mw);
    cout << "加密后:"<<mw <<endl;
    
    jiemi(mw,my,hy);
    cout << "解密后:"<<hy<<endl;

    return 0;
}