Vigenère密码
【问题描述】
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加密在操作时需要注意:
®运算忽略参与运算的字母的大小写,并保持字母在明文M中的大小写形式;
当明文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密码相关推荐
- 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 ...
- 信息学奥赛一本通(1402:Vigenère密码)
1402:Vigenère密码 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 9482 通过数: 5450 [题目描述] 6世纪法国外交家Blaise d ...
- Vigenère密码(信息学奥赛一本通-T1402)
[题目描述] 16世纪法国外交家Blaise de Vigenère设计了一种多表密码加密算法--Vigenère密码.Vigenère密码的加密解密算法简单易用,且破译难度比较高,曾在美国南北战争中 ...
- codevs1197 Vigenère密码
题目描述 Description 16 世纪法国外交家Blaise de Vigenère设计了一种多表密码加密算法--Vigenère密码.Vigenère 密码的加密解密算法简单易用,且破译难度比 ...
- 计蒜客——[NOIP2012]Vigenère 密码
16 世纪法国外交家 Blaise de Vigenère 设计了一种多表密码加密算――Vigenère 密码.Vigenère 密码的加密解密算法简单易用,且破译难度比较高,曾在美国南北战争中为南军 ...
- Vigenère密码题解
描述 16世纪法国外交家Blaise de Vigenère设计了一种多表密码加密算法--Vigenère密码.Vigenère密码的加密解密算法简单易用,且破译难度比较高,曾在美国南北战争中为南军所 ...
- Vigenère 密码
略简单的字符串+模拟. 原题链接:https://www.luogu.org/problem/show?pid=1079#sub 如果你对那个图感到懵逼,那属于正常,但没关系,这个图其实作用不大,我们 ...
- Vigenère密码(洛谷P1079题题解,Java语言描述)
题目要求 P1079题目链接 分析 这题不太好讲,做完有段时间了. 不过推出一堆式子挺麻烦的. 大家感兴趣自己看一下. 推荐两种比较极端的做法: ASCII码超简洁解法 惨绝人寰的打表做法 AC代码( ...
- 洛谷P1079 Vigenère 密码
题目链接:https://www.luogu.org/problemnew/show/P1079 转载于:https://www.cnblogs.com/LITTLESUNwl/p/10426943. ...
最新文章
- Nagios插件NDOUtils安装
- 资料分享:推荐一本《简单粗暴TensorFlow 2.0》开源电子书!
- webjars管理静态资源
- hdu4418 概率dp+高斯消元(近日吐槽)
- 解除ASP.net上传文件大小的限制
- RT-Thread Studio开发GD32VF103
- LeetCode 372. 超级次方(递归)
- [一场梦转无踪 为什么美梦有始无终]香格里拉夏宫自助茶点
- 后端API接口的错误信息返回规范
- mac 类似matlab,10款Mac上科研人员必备的科研工具推荐和下载 | 玩转苹果
- 2021-02-24 Multisim 14.0 场效应管单按键开关电路
- API 开放接口设计之 appId,appSecret,accessToken (同微信开发平台接口)
- 2、phpstudy本地搭建网站
- English Learning - Day21 作业打卡 2022.12.27 周二
- Jmeter简单使用教程(一)
- JAVA8 流使用 字符串转List
- #青春有未来,我和华为云的故事#
- 案例:丁三石挑战经典歌剧
- JAVA获取本地字库
- outlook邮箱邮件内容乱码_Outlook电子邮件乱码问题巧解
热门文章
- 科大星云诗社动态20210517
- 近三月浏览器网页访问量统计
- 手把手教你在 Ubuntu16.04 安装 GPU 驱动 + CUDA9.0 + cuDNN7
- oracle 如何形成死锁,ORACLE死锁
- sql server 中将datetime类型转换为date,或者time
- 先有鸡还是先有蛋?--IT公司用人困惑
- 互联网协议IP抓包分析 -- wireshark
- python向sqlite数据库中插入数据(变量)
- 【快乐水题】747. 至少是其他数字两倍的最大数
- Servlet、Tomcat、 SpringMVC 之间的关系