C++加密、解密算法(数据结构)

/ 加密、解密算法  //
#include<stdio.h>
#include<conio.h>

void main()
{
    char a[100];
    int k,i;
    printf("/n请输入移位值K和明文(小写字母并以‘#’结束):/n/n ");
    scanf("%d/n",&k);//输入密码K
    if(k>26)         //移位超出26时,相当于重复循环
        k=k%26;  
    for(i=0;i<100;i++)
    {
        scanf("%c",&a[i]);   //输入明文
        if(a[i]=='#')
            break;
    }
    printf("/n密文为 :");
    for(i=0;a[i]!='#';i++)
    {
        if(a[i]<97||a[i]>122)
        {
            printf("/n移位值K格式出错或明文输入错误,无法显示密文!程序将退出!/n");
            return;
        }
    }
    for(i=0;a[i]!='#';i++)
    {
        if(k>0)
        {
            a[i]=a[i]-32;
            if(k>90-a[i])
                a[i]=65+(k-(90-a[i]))-1;
            else
                a[i]=a[i]+k; //非循环情况是转换成大写后,加上移位密码
        }
        else
        {
            k=-k;
            if(k>26)         //移位超出26时,相当于重复循环
                k=k%26;
            a[i]=a[i]-32;
            if(k>a[i]-65)
                a[i]=90-(k-(a[i]-65))-1;
            else
                a[i]=a[i]-k;
            k=-k;
        }
        printf("%c",a[i]);
    }
    printf("/n");
    k=0;
    printf("/n请输入移位值K和密文(大写字母,以‘#’结束):/n/n ");
    scanf("%d/n",&k);
    if(k>26)
        k=k%26;
    for(i=0;i<80;i++)
    {
        scanf("%c",&a[i]);
        if(a[i]=='#')break;
    }
    printf("/n明文如下 :");
    for(i=0;a[i]!='#';i++)
    {
        if(a[i]<65||a[i]>90)
        {
   printf("/n移位值K格式出错或密文输入错误,无法显示明文!将退出程序!/n");
   return;
        }
    }
    for(i=0;a[i]!='#';i++)
    {
        if(k>0)
        {
            a[i]=a[i]+32;
            if(k>a[i]-97)
                a[i]=122-(k-(a[i]-97))+1;
            else
                a[i]=a[i]-k;
        }
        else
        {
            k=-k;
            if(k>26)
                k=k%26;
            a[i]=a[i]+32;
            if(k>122-a[i])
                a[i]=97+(k-(122-a[i]))+1;
            else
                a[i]=a[i]+k;
            k=-k;
        }
        printf("%c",a[i]);
    }
    printf("/n");
    getch();
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值