题目描述
16 世纪法国外交家 Blaise de Vigenère 设计了一种多表密码加密算法――Vigenère 密
码。Vigenère 密码的加密解密算法简单易用,且破译难度比较高,曾在美国南北战争中为
南军所广泛使用。
在密码学中,我们称需要加密的信息为明文,用 M 表示;称加密后的信息为密文,用
C 表示;而密钥是一种参数,是将明文转换为密文或将密文转换为明文的算法中输入的数据,
记为 k。 在 Vigenère 密码中,密钥 k 是一个字母串,k=k1k2…kn。当明文 M=m1m2…mn时,
得到的密文 C=c1c2…cn,其中 ci=mi®ki,运算®的规则如下表所示:
Vigenère 加密在操作时需要注意:
®运算忽略参与运算的字母的大小写,并保持字母在明文 M 中的大小写形式;
- 当明文 M 的长度大于密钥 k 的长度时,将密钥 k 重复使用。
例如,明文 M=Helloworld,密钥 k=abc 时,密文 C=Hfnlpyosnd。
输入输出格式
输入格式:
输入共 2 行。
第一行为一个字符串,表示密钥 k,长度不超过 100,其中仅包含大小写字母。第二行
为一个字符串,表示经加密后的密文,长度不超过 1000,其中仅包含大小写字母。
输出格式:
输出共 1 行,一个字符串,表示输入密钥和密文所对应的明文。
输入输出样例
CompleteVictory
Yvqgpxaimmklongnzfwpvxmniytm
Wherethereisawillthereisaway
说明
【数据说明】
对于 100%的数据,输入的密钥的长度不超过 100,输入的密文的长度不超过 1000,且
都仅包含英文字母。
NOIP 2012 提高组 第一天 第一题
/*
又是一个模拟题,为了方便,我把密文和钥文都改成了大写字母,然后设 一个flag数组,储存密文中的大小写情况,省下的直接按公式做
*/
#include<cstdio>
#include<iostream>
#include<cstring>
#define M 1010
using namespace std;
char k[M],mi[M];
int ming[M],flag[M];
int main()
{
cin>>k>>mi;
int nk=strlen(k),nmi=strlen(mi);
for(int i=;i<nmi;i++)
if(mi[i]>='a'&&mi[i]<='z')
{
flag[i]=;
mi[i]+='A'-'a';
}
for(int i=;i<nk;i++)
if(k[i]>='a'&&k[i]<='z')
k[i]+='A'-'a';
int p=;
for(int i=;i<nmi;i++)
{
if(p>=nk)p=;
int a=mi[i]-'A'+,b=k[p]-'A'+;
if(a>=b)ming[i]=a-b+;
else ming[i]=a-b+;
if(!ming[i])ming[i]=;
p++;
}
for(int i=;i<nmi;i++)
if(flag[i])
printf("%c",char(ming[i]+'a'-));
else printf("%c",char(ming[i]+'A'-));
return ;
}
Vigenère 密码(luogu 1079)的更多相关文章
-
NOIP 2012 Vigen&#232;re 密码
洛谷 P1079 Vigenère 密码 https://www.luogu.org/problemnew/show/P1079 JDOJ 1779: [NOIP2012]Vigenèr密码 D1 T ...
-
Vigen&#232;re密码
来源 NOIP2012复赛 提高组 第一题 描述 16世纪法国外交家Blaise de Vigenère设计了一种多表密码加密算法--Vigenère密码.Vigenère密码的加密解密算法简单易用 ...
-
[NOIP2012] 提高组 洛谷P1079 Vigen&#232;re 密码
题目描述 16 世纪法国外交家 Blaise de Vigenère 设计了一种多表密码加密算法――Vigenère 密 码.Vigenère 密码的加密解密算法简单易用,且破译难度比较高,曾在美国南 ...
-
NOIp 2012 #1 Vigen&#232;re 密码 Label:模拟
题目描述 16 世纪法国外交家 Blaise de Vigenère 设计了一种多表密码加密算法――Vigenère 密 码.Vigenère 密码的加密解密算法简单易用,且破译难度比较高,曾在美国南 ...
-
Vigen&#232;re 密码NOIP 2012 提高组 第一天 第一题
题目描述 16 世纪法国外交家 Blaise de Vigenère 设计了一种多表密码加密算法――Vigenère 密 码.Vigenère 密码的加密解密算法简单易用,且破译难度比较高,曾在美国南 ...
-
NOIP2012 Vigen&#232;re 密码
1.Vigenère 密码 (vigenere.cpp/c/pas) [问题描述] 16 世纪法国外交家 Blaise de Vigenère 设计了一种多表密码加密算法——Vigenère 密码.V ...
-
[字符串][NOIP2012]Vigen&#232;re密码
Vigenère密码 题目描述 16世纪法国外交家Blaise de Vigenère设计了一种多表密码加密算法——Vigenère密码.Vigenère密码的加密解密算法简单易用,且破译难度比较高, ...
-
08:Vigen&#232;re密码
08:Vigenère密码 查看 提交 统计 提问 总时间限制: 1000ms 内存限制: 65536kB 描述 16世纪法国外交家Blaise de Vigenère设计了一种多表密码加密算法— ...
-
80.Vigenère密码(模拟)
Vigenère密码(文件名vigenere.cpp vigenere.in vigenere.out) 题目描述 Description 16 世纪法国外交家Blaise de Vigen ...
随机推荐
-
计算sql语句的查询时间
set statistics profile on set statistics io on set statistics time on go <这里写上你的语句...> go set ...
-
ROWNUMBER()、RANK()、DENSE_RANK()、NTILE1
SQLServer针对排名函数ROWNUMBER().RANK().DENSE_RANK().NTILE的研究!~ 相信大家在软件工程中经常会遇到对某些数据进行排名的问题,尤其是对于电子商务的HR来说 ...
-
Vsftp的PASV mode(被动模式传送)和Port模式解释
什么叫做PASV mode(被动模式传送)?他是如何工作的?FTP的连接一般是有两个连接的,一个是客户程和服务器传输命令的,另一个是数据传送的连接.FTP服务程序一般会支持两种不同的模式,一种是Por ...
-
Git版本回退和撤销修改的区别
在阅读廖雪峰git教程时,对版本回退和暂存区撤销修改没太看懂,所以自己测试了一下. 版本回退: git reset --hard HEAD 这个命令用于版本回退,就是将已提交的版本覆盖本地工作区的内容 ...
-
利用FPN构建Faster R-CNN检测
FPN就是所谓的金字塔结构的检测器,(Feature Pyramid Network) 把FPN融合到Faster rcnn中能够很大程度增加检测器对全图信息的认知, 步骤如图所示: 1.先将图像送入 ...
-
SqlDataAdapter概述
SqlDataAdapter是 DataSet和 SQL Server之间的桥接器,用于检索和保存数据.SqlDataAdapter通过对数据源使用适当的Transact-SQL语句映射 Fill(它 ...
-
Web API: Security: Authentication and Authority
原文地址: http://www.asp.net/web-api/overview/security/authentication-and-authorization-in-aspnet-web-ap ...
-
【传输协议】https SSL主流数字证书都有哪些格式?
一般来说,主流的Web服务软件,通常都基于两种基础密码库:OpenSSL和Java. Tomcat.Weblogic.JBoss等,使用Java提供的密码库.通过Java的Keytool工具,生成Ja ...
-
Spring Data Jpa使用@Query注解实现模糊查询(LIKE关键字)
/** * * @param file_name 传入参数 * @return */ @Query(value = "select * from user where name LIKE C ...
-
20169219 实验四Android程序设计
一.实现Linux下dc的功能,计算后缀表达式的值 public int evaluate(String expr) { int op1, op2, result = 0; String token; ...