打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
【NOIP2012提高组】Vigenère 密码

题目描述

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-’A’+ki-’A’)mod26+’A’,运算的规则如下表所示:


Vigenere加密在操作时需要注意:

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

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

例如,明文 M=HelloworldM=HelloworldM=Helloworld,密钥 k=abck=abck=abc 时,密文 C=HfnlpyosndC=HfnlpyosndC=Hfnlpyosnd

输入格式

输入共2行。

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

对于100%的数据,输入的密钥的长度不超过100,输入的密文的长度不超过1000,且都仅包含英文字母。

输出格式

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

输入输出样例

输入:

CompleteVictory

Yvqgpxaimmklongnzfwpvxmniytm

输出:

Wherethereisawillthereisaway


我看到有的人是打表来做的,其实这道题的思维过程还是很简单的,给你密文推出明文,首先来说说密钥,密钥重复进行使用且不区分大小写的,所以我们完全可以把密钥全部换成小写(或大写)的形式。我们从上面的那张大的密码表中可以推出来 暗文=明文+秘钥-‘a’,如果出现超过字母‘z’或‘Z’的情况就从‘a’、‘A’重新开始。思路很清晰了吧,那就上代码吧。

温馨提示:你永远不会到NOIP会给你挖什么样的坑,所以不确定要不要检验的时候,请你都检验一遍。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
1
维吉尼亚(Vigenere)密码算法(Javascript实现加密与解密) | 学步园
维吉尼亚密码在线加密解密
VIGENERE加密的深入
密码长度与强度应该怎样设置,最权威的解读来了!一张图秒懂 网络
密码术(三)
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服