NOIP201205Vigenère密码
NOIP201205Vigenère密码
- 题目
- 链接
- 字面描述
- 题目描述
- 输入格式
- 输出格式
- 样例 #1
- 样例输入 #1
- 样例输出 #1
- 提示
- 思路
- 代码实现
题目
链接
https://www.luogu.com.cn/problem/P1079
字面描述
题目描述
16 世纪法国外交家 Blaise de Vigenère 设计了一种多表密码加密算法 Vigenère 密码。Vigenère 密码的加密解密算法简单易用,且破译难度比较高,曾在美国南北战争中为南军所广泛使用。
在密码学中,我们称需要加密的信息为明文,用 M M M 表示;称加密后的信息为密文,用 C C C 表示;而密钥是一种参数,是将明文转换为密文或将密文转换为明文的算法中输入的数据,记为 k k k。 在 Vigenère 密码中,密钥 k k k 是一个字母串, k = k 1 , k 2 , … , k n k=k_1,k_2,…,k_n k=k1,k2,…,kn。当明文 M = m 1 , m 2 , … , m n M=m_1,m_2,…,m_n M=m1,m2,…,mn 时,得到的密文 C = c 1 , c 2 , … , c n C=c_1,c_2,…,c_n C=c1,c2,…,cn,其中 c i c_i ci= m i m_i mi® k i k_i ki,运算®的规则如下表所示:
Vigenère 加密在操作时需要注意:
®运算忽略参与运算的字母的大小写,并保持字母在明文 M M M 中的大小写形式;
当明文 M M M 的长度大于密钥 k k k 的长度时,将密钥 k k k 重复使用。
例如,明文 M = Helloworld M=\texttt{Helloworld} M=Helloworld,密钥 k = abc k=\texttt{abc} k=abc 时,密文 C = Hfnlpyosnd C=\texttt{Hfnlpyosnd} C=Hfnlpyosnd。
输入格式
共 2 行。
第一行为一个字符串,表示密钥 k k k,长度不超过 100 100 100,其中仅包含大小写字母。
第二行为一个字符串,表示经加密后的密文,长度不超过 1000 1000 1000,其中仅包含大小写字母。
输出格式
一个字符串,表示输入密钥和密文所对应的明文。
样例 #1
样例输入 #1
CompleteVictory
Yvqgpxaimmklongnzfwpvxmniytm
样例输出 #1
Wherethereisawillthereisaway
提示
对于 100 % 100\% 100% 的数据,输入的密钥的长度不超过 100 100 100,输入的密文的长度不超过 1000 1000 1000,且都仅包含英文字母。
NOIP 2012 提高组 第一天 第一题
思路
不妨看出加密格式是两个字母ASCII码值相加再取模26-1
反推一下:
if(x<0)x+=26;
x++;
建模完成开始写代码
代码实现
#include<bits/stdc++.h>
using namespace std;int k=-1;
string a,b;
int main(){//freopen("B.in","r",stdin);//freopen("B.out","w",stdout);cin>>b>>a;int lena=a.length(),lenb=b.length();//循环遍历字符串for(int i=0;i<lena;i++){//k密钥对应++k;if(k==lenb)k-=lenb;//解密输出char c=tolower(a[i]),d=tolower(b[k]);int x=(c-'a')-(d-'a');if(x<0)x+=26;x++;if(a[i]>='a'&&a[i]<='z')printf("%c",x+'a'-1);else printf("%c",x+'A'-1);}return 0;
}
NOIP201205Vigenère密码相关推荐
- 在Chrome中打开网页时出现以下问题 您的连接不是私密连接 攻击者可能会试图从 x.x.x.x 窃取您的信息(例如:密码、通讯内容或信用卡信息)
现象:在Chrome中打开网页时出现以下问题 您的连接不是私密连接 攻击者可能会试图从 x.x.x.x 窃取您的信息(例如:密码.通讯内容或信用卡信息). 当点开"了解详情"后显示 ...
- 设置linux初始root密码
简单一步设置linux第一个root密码 sudo passwd root #输入当前账户密码 #输入准备设置的root密码 #确认密码 如下所示:
- linux修改mysql密码sa_如何修改SA口令,数据库SA密码怎么改?
[问题现象]安装数据库的时候设置过SA口令,安装后不记得了?有没有办法可以修改数据库SA口令? [原因分析]各版本数据库更改SA口令的方法不一样,一般MSDE2000数据库安装时没有SA口令,SQL ...
- python实现简单的用户密码登录控制(输入三次就锁定用户)
问题描述 我们经常在登录一些网站的时候,发现我们如果连续的输错好几次密码,我们的帐号就被锁定起来了,那这个过程是如何实现的呢?本程序主要就是解决以下3件事情 1.输入用户名密码 2.认证成功并显示欢迎 ...
- mysql/mariadb centos7 修改root用户密码及配置参数
一.修改用户密码,以root为例 1. 知道root密码,需要修改 方法a. 登入数据库来修改 # mysql -uroot -p /*输入密码进入*/ /*第一个方式:直接编辑数据库字段*/ Mar ...
- centos7系统中忘记了root管理员账号密码的解决方式
随着计算机的使用越来越普遍,现在的用户都会有多个密码,不是这软件的密码就是那个的,QQ.邮箱.游戏,还有系统的登录密码!每一个密码都不一样!所以越来越多的密码需要去记住!也因为这样,只要其中一个长时间 ...
- LeetCode简单题之唯一摩尔斯密码词
题目 国际摩尔斯密码定义一种标准编码方式,将每个字母对应于一个由一系列点和短线组成的字符串, 比如: 'a' 对应 ".-" , 'b' 对应 "--" , ' ...
- Redis使用认证密码登录
Redis默认配置是不需要密码认证的,也就是说只要连接的Redis服务器的host和port正确,就可以连接使用. 这在安全性上会有一定的问题,所以需要启用Redis的密码认证功能,增加Redis服务 ...
- 启动MySQL:net start mysql出现问题+本地Mysql忘记密码的修改方法
解决方法1:(普遍) 管理员开启cmd,进入bin文件夹,方法见图: cmd内输入:cd C:\Program Files\MySQL\MySQL Server 8.0\bin这里的路径要换成你自己b ...
最新文章
- 写代码:使用while循环实现输出1,2,3,4,5,7,8,9,11,12
- Oracle 常用命令 及近期使用问题集合
- 符合标准的TreeView实现(Div+CSS+JS+ASP.NET)
- mybatis查询时间段sql语句
- Python Demo 03 星期输出
- 银行核心系统之应用集成
- 344.Reverse String
- 拓扑排序---AOV图
- 使用截图工具FastStone Capture
- JQuery AJAX 的表单提交
- linux 代码编辑器软件下载,Visual Studio Code下载
- wnmp环境 php7,WNMP 开发环境搭建
- 重磅!SK海力士600亿收购Intel存储业务!
- python制作神经网络_MicroPython动手做(10)——零基础学MaixPy之神经网络KPU
- 反三角函数之间的关系以及导数关系
- 一样的产品,客户为什么不去亚马逊买而选择独立站
- 【电机学复习笔记】第五章 异步电动机
- java 统计字符串中每个字母有多少个
- 从“天地一体”到“移动组网”,中国量子通信产业是如何“炼成”的?
- 康柏v3322安装linux系统,SUN的服务器能安装Linux操作系统吗