【问题描述】

16世纪法国外交家Blaise de Vigenère设计了一种多表密码加密算法——Vigenère密

码。Vigenère密码的加密解密算法简单易用,且破译难度比较高,曾在美国南北战争中为

南军所广泛使用。

在密码学中,我们称需要加密的信息为明文,用M表示;称加密后的信息为密文,用

C表示;而密钥是一种参数,是将明文转换为密文或将密文转换为明文的算法中输入的数据,

记为k。 在Vigenère密码中,密钥k是一个字母串,k=k1,k2…kn。当明文M=m1m2…mn时,

得到的密文C=c1,c2…cn,其中ci=mi®ki,运算®的规则如下表所示:

Vigenère加密在操作时需要注意:

  1. ®运算忽略参与运算的字母的大小写,并保持字母在明文M中的大小写形式;

  2. 当明文M的长度大于密钥k的长度时,将密钥k重复使用。

例如,明文M=Helloworld,密钥k=abc时,密文C=Hfnlpyosnd。

Input

输入共2行。

第一行为一个字符串,表示密钥k,长度不超过100,其中仅包含大小写字母。第二行

为一个字符串,表示经加密后的密文,长度不超过1000,其中仅包含大小写字母。

Output

输出共1行,一个字符串,表示输入密钥和密文所对应的明文。

Sample Input

CompleteVictory
Yvqgpxaimmklongnzfwpvxmniytm

Sample Output

Wherethereisawillthereisaway

Data Constraint

Hint
【数据说明】

对于100%的数据,输入的密钥的长度不超过100,输入的密文的长度不超过1000,且

都仅包含英文字母。

.
.
.
.
.
分析
水题一道
注意输出给出的是密钥和密文,求明文。

.
.
.
.
.
程序:

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
string k,c;
int lk,lc,i,j;int main()
{cin>>k;cin>>c;lk=k.length();lc=c.length();i=0;j=0;while (i!=lc){int bz=0,pd,u=0;char sc;if (c[i]>='a'&&c[i]<='z'){if (k[j]>='a'&&k[j]<='z') bz=(int)k[j]-'a'; elseif (k[j]>='A'&&k[j]<='Z') bz=(int)k[j]-'A';pd=c[i]-'a';if (pd>=bz) sc=(char)c[i]-bz,u=1; else bz-=(int)c[i]-'a'+1;} else{if (k[j]>='a'&&k[j]<='z') bz=(int)k[j]-'a'; elseif (k[j]>='A'&&k[j]<='Z') bz=(int)k[j]-'A';pd=c[i]-'A';if (pd>=bz) sc=(char)c[i]-bz,u=1; else bz-=(int)c[i]-'A'+1;}if (u==1) cout<<sc; else{if (c[i]>='a'&&c[i]<='z') sc=(char)'z'-bz; else sc=(char)'Z'-bz;cout<<sc;}i++;j++;if (j==lk) j=0;}return 0;
}

转载于:https://www.cnblogs.com/YYC-0304/p/10292779.html

Vigenère密码相关推荐

  1. 08:vigenère密码_密码技术:Vigenére密码,Playfair密码,Hill密码

    08:vigenère密码 1)Vigenére密码 (1) Vigenére Cipher) This technique is an example of Polyalphabetic Subst ...

  2. 信息学奥赛一本通(1402:Vigenère密码)

    1402:Vigenère密码 时间限制: 1000 ms         内存限制: 65536 KB 提交数: 9482     通过数: 5450 [题目描述] 6世纪法国外交家Blaise d ...

  3. Vigenère密码(信息学奥赛一本通-T1402)

    [题目描述] 16世纪法国外交家Blaise de Vigenère设计了一种多表密码加密算法--Vigenère密码.Vigenère密码的加密解密算法简单易用,且破译难度比较高,曾在美国南北战争中 ...

  4. codevs1197 Vigenère密码

    题目描述 Description 16 世纪法国外交家Blaise de Vigenère设计了一种多表密码加密算法--Vigenère密码.Vigenère 密码的加密解密算法简单易用,且破译难度比 ...

  5. 计蒜客——[NOIP2012]Vigenère 密码

    16 世纪法国外交家 Blaise de Vigenère 设计了一种多表密码加密算――Vigenère 密码.Vigenère 密码的加密解密算法简单易用,且破译难度比较高,曾在美国南北战争中为南军 ...

  6. Vigenère密码题解

    描述 16世纪法国外交家Blaise de Vigenère设计了一种多表密码加密算法--Vigenère密码.Vigenère密码的加密解密算法简单易用,且破译难度比较高,曾在美国南北战争中为南军所 ...

  7. Vigenère 密码

    略简单的字符串+模拟. 原题链接:https://www.luogu.org/problem/show?pid=1079#sub 如果你对那个图感到懵逼,那属于正常,但没关系,这个图其实作用不大,我们 ...

  8. Vigenère密码(洛谷P1079题题解,Java语言描述)

    题目要求 P1079题目链接 分析 这题不太好讲,做完有段时间了. 不过推出一堆式子挺麻烦的. 大家感兴趣自己看一下. 推荐两种比较极端的做法: ASCII码超简洁解法 惨绝人寰的打表做法 AC代码( ...

  9. 洛谷P1079 Vigenère 密码

    题目链接:https://www.luogu.org/problemnew/show/P1079 转载于:https://www.cnblogs.com/LITTLESUNwl/p/10426943. ...

最新文章

  1. Nagios插件NDOUtils安装
  2. 资料分享:推荐一本《简单粗暴TensorFlow 2.0》开源电子书!
  3. webjars管理静态资源
  4. hdu4418 概率dp+高斯消元(近日吐槽)
  5. 解除ASP.net上传文件大小的限制
  6. RT-Thread Studio开发GD32VF103
  7. LeetCode 372. 超级次方(递归)
  8. [一场梦转无踪 为什么美梦有始无终]香格里拉夏宫自助茶点
  9. 后端API接口的错误信息返回规范
  10. mac 类似matlab,10款Mac上科研人员必备的科研工具推荐和下载 | 玩转苹果
  11. 2021-02-24 Multisim 14.0 场效应管单按键开关电路
  12. API 开放接口设计之 appId,appSecret,accessToken (同微信开发平台接口)
  13. 2、phpstudy本地搭建网站
  14. English Learning - Day21 作业打卡 2022.12.27 周二
  15. Jmeter简单使用教程(一)
  16. JAVA8 流使用 字符串转List
  17. #青春有未来,我和华为云的故事#
  18. 案例:丁三石挑战经典歌剧
  19. JAVA获取本地字库
  20. outlook邮箱邮件内容乱码_Outlook电子邮件乱码问题巧解

热门文章

  1. 科大星云诗社动态20210517
  2. 近三月浏览器网页访问量统计
  3. 手把手教你在 Ubuntu16.04 安装 GPU 驱动 + CUDA9.0 + cuDNN7
  4. oracle 如何形成死锁,ORACLE死锁
  5. sql server 中将datetime类型转换为date,或者time
  6. 先有鸡还是先有蛋?--IT公司用人困惑
  7. 互联网协议IP抓包分析 -- wireshark
  8. python向sqlite数据库中插入数据(变量)
  9. 【快乐水题】747. 至少是其他数字两倍的最大数
  10. Servlet、Tomcat、 SpringMVC 之间的关系