jzoj3099. 【NOIP2012提高组】Vigenère密码(B组——Day2)

2024-01-30 08:38

本文主要是介绍jzoj3099. 【NOIP2012提高组】Vigenère密码(B组——Day2),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

jzoj3099. 【NOIP2012提高组】Vigenère密码(B组——Day2)

题目

Description

【问题描述】

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

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

南军所广泛使用。

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

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

记为k。 在Vigenère密码中,密钥k是一个字母串,k=k

1

k

2…k

n。当明文M=m1m2…mn时,

得到的密文C=c1

c

2…c

n,其中c

i

=mi®k

i,运算®的规则如下表所示:

在这里插入图片描述

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

Hint

【数据说明】

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

都仅包含英文字母。


解析

其实就是用密文降去密钥,注意一下减后的数如果小于’a’或’A’要加26


程序

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;int l1,l2;
char a[1001],b[1001];int main(){cin>>a;cin>>b;l1=strlen(a);l2=strlen(b);for (int i=0;i<l2;i++){int c=a[i%l1],n=0;if (c>='a'&&c<='z')	n=c-'a';else n=c-'A';if (b[i]>='a' && b[i]<='z'){if (b[i]-n<'a') b[i]=b[i]+26-n;else b[i]-=n;}else{if (b[i]-n<'A') b[i]=b[i]+26-n;else b[i]-=n;}}cout<<b<<endl;return 0;
}

这篇关于jzoj3099. 【NOIP2012提高组】Vigenère密码(B组——Day2)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/659679

相关文章

Python中re模块结合正则表达式的实际应用案例

《Python中re模块结合正则表达式的实际应用案例》Python中的re模块是用于处理正则表达式的强大工具,正则表达式是一种用来匹配字符串的模式,它可以在文本中搜索和匹配特定的字符串模式,这篇文章主... 目录前言re模块常用函数一、查看文本中是否包含 A 或 B 字符串二、替换多个关键词为统一格式三、提

Spring Security中用户名和密码的验证完整流程

《SpringSecurity中用户名和密码的验证完整流程》本文给大家介绍SpringSecurity中用户名和密码的验证完整流程,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定... 首先创建了一个UsernamePasswordAuthenticationTChina编程oken对象,这是S

PostgreSQL数据库密码被遗忘时的操作步骤

《PostgreSQL数据库密码被遗忘时的操作步骤》密码遗忘是常见的用户问题,因此提供一种安全的遗忘密码找回机制是十分必要的,:本文主要介绍PostgreSQL数据库密码被遗忘时的操作步骤的相关资... 目录前言一、背景知识二、Windows环境下的解决步骤1. 找到PostgreSQL安装目录2. 修改p

Druid连接池实现自定义数据库密码加解密功能

《Druid连接池实现自定义数据库密码加解密功能》在现代应用开发中,数据安全是至关重要的,本文将介绍如何在​​Druid​​连接池中实现自定义的数据库密码加解密功能,有需要的小伙伴可以参考一下... 目录1. 环境准备2. 密码加密算法的选择3. 自定义 ​​DruidDataSource​​ 的密码解密3

Java使用MethodHandle来替代反射,提高性能问题

《Java使用MethodHandle来替代反射,提高性能问题》:本文主要介绍Java使用MethodHandle来替代反射,提高性能问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑... 目录一、认识MethodHandle1、简介2、使用方式3、与反射的区别二、示例1、基本使用2、(重要)

SpringBoot如何对密码等敏感信息进行脱敏处理

《SpringBoot如何对密码等敏感信息进行脱敏处理》这篇文章主要为大家详细介绍了SpringBoot对密码等敏感信息进行脱敏处理的几个常用方法,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录​1. 配置文件敏感信息脱敏​​2. 日志脱敏​​3. API响应脱敏​​4. 其他注意事项​​总结

JavaScript实战:智能密码生成器开发指南

本文通过JavaScript实战开发智能密码生成器,详解如何运用crypto.getRandomValues实现加密级随机密码生成,包含多字符组合、安全强度可视化、易混淆字符排除等企业级功能。学习密码强度检测算法与信息熵计算原理,获取可直接嵌入项目的完整代码,提升Web应用的安全开发能力 目录

使用Java实现Navicat密码的加密与解密的代码解析

《使用Java实现Navicat密码的加密与解密的代码解析》:本文主要介绍使用Java实现Navicat密码的加密与解密,通过本文,我们了解了如何利用Java语言实现对Navicat保存的数据库密... 目录一、背景介绍二、环境准备三、代码解析四、核心代码展示五、总结在日常开发过程中,我们有时需要处理各种软

CentOS和Ubuntu系统使用shell脚本创建用户和设置密码

《CentOS和Ubuntu系统使用shell脚本创建用户和设置密码》在Linux系统中,你可以使用useradd命令来创建新用户,使用echo和chpasswd命令来设置密码,本文写了一个shell... 在linux系统中,你可以使用useradd命令来创建新用户,使用echo和chpasswd命令来设

Windows 上如果忘记了 MySQL 密码 重置密码的两种方法

《Windows上如果忘记了MySQL密码重置密码的两种方法》:本文主要介绍Windows上如果忘记了MySQL密码重置密码的两种方法,本文通过两种方法结合实例代码给大家介绍的非常详细,感... 目录方法 1:以跳过权限验证模式启动 mysql 并重置密码方法 2:使用 my.ini 文件的临时配置在 Wi