? ? ? ? ? ?
题目是这样的:
著名的密码学者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
相关知识:
明文、密文、密钥、加密和解密; 替代密码
编程要求
将电文中的大写字母变为其后的第n(小于等于26)个字母,并将最后n个字母,如n=3时的X、Y、Z变为A、B、C。
本关涉及的代码文件的代码框架如下: #include <stdio.h> // 标准输入输出库函数 int main() // 定义main函数 { int ch; //存字符的ASCII码值 int n; //n存密钥,如1,3,25 scanf("%d",&n); getchar(); //吸收回车键值 // 请在此添加算法核心代码 /** Begin *****/
/** End **/ return 0; }
#include <stdio.h>
int main()
{
int ch;
int n;
scanf("%d",&n);
getchar();
unsign char c;
while((c=getchar())!='\n')
{
if((c>='a'&&c<='z')||(c>='A'&&c<='Z'))
{
c=c+n;
if((c> 'Z'&&c<= 'Z'+n)||(c>'z')) c=c-26;
}
printf("%c",c);
}
return 0;
}
|