1.5发射手 2021-10-02 22:32 采纳率: 100%
浏览 104
已结题

求一个解题思路,给代码也行(我裂开了)

任务描述
著名的密码学者Ron Rivest解释道:“密码学是关于如何在敌人存在的环境中通讯”,密码学是信息安全等相关议题,如认证、访问控制的核心。密码学已被应用在日常生活:包括 自动柜员机的芯片卡、电脑使用者存取密码、 电子商务等等。
在通信过程中,待加密的信息称为明文,已被加密的信息称为密文,仅有收、发双方知道的信息称为密钥。在密钥控制下,由明文变到密文的过程叫加密,其逆过程叫脱密或解密。
由于古时多数人并不识字,最早的秘密书写的形式只用到纸笔或等同物品,随着识字率提高,就开始需要真正的密码学了。最古典的两个加密技巧是:
(1)置换(Transposition cipher):将字母顺序重新排列,例如‘help me’变成‘ehpl em’。
(2)替代(substitution cipher):有系统地将一组字母换成其他字母或符号,例如‘fly at once’变成‘gmz bu podf’(每个字母用下一个字母取代,密钥为1)。

本关任务:
本任务采用替代密码,对一段电文进行加密:
将电文中的大(小)写字母变为其后的第n(如n=3时)个字母,并将最后n个字母,如n=3时的X、Y、Z变为A、B、C。
例如,密钥n=1时:
输入明文:fly at once
经加密后的密文为:gmz bu podf

例如,密钥n=3时:
输入明文:fly at once
经加密后的密文为:iob dw rqfh

例如,密钥n=25时:
输入明文:Fly at once
经加密后的密文为:Ekx zs nmbd

  • 写回答

2条回答 默认 最新

  • qzjhjxj 2021-10-02 23:40
    关注

    供参考:

    #include<stdio.h>
    int main()
    {
        char a[256];
        int  i=0,n=1;
        printf("Input key:");
        scanf("%d",&n);
        getchar();
        gets(a);
        while(a[i]!='\0')
        {
             if(a[i]>='A'&&a[i]<='Z')
                a[i] = (a[i]-'A'+ n)%26+'A';
             else if(a[i]>='a'&&a[i]<='z')
                a[i] = (a[i]-'a'+ n)%26+'a';
             i++;
        }
        a[i]='\0';
        printf("%s\n",a);
        
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 10月11日
  • 已采纳回答 10月3日
  • 创建了问题 10月2日

悬赏问题

  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图
  • ¥15 关于大棚监测的pcb板设计
  • ¥15 stm32开发clion时遇到的编译问题
  • ¥15 lna设计 源简并电感型共源放大器
  • ¥15 如何用Labview在myRIO上做LCD显示?(语言-开发语言)
  • ¥15 Vue3地图和异步函数使用