码迷,mamicode.com
首页 > 其他好文 > 详细

[字符串][NOIP2012]Vigenère密码

时间:2018-04-20 00:13:52      阅读:145      评论:0      收藏:0      [点我收藏+]

标签:忽略   div   The   code   lsp   ret   P20   style   body   

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?ki,运算?的规则如下表所示:

技术分享图片

Vigenère 加密在操作时需要注意:
    1. ?运算忽略参与运算的字母的大小写,并保持字母在明文M 中的大小写形式;
    2. 当明文M 的长度大于密钥k 的长度时,将密钥k 重复使用。
    例如,明文M=Helloworld,密钥k=abc 时,密文C=Hfnlpyosnd。

 

明文
H        
e     
l    
l     
o     
w    
o     
r     
l    
d
密钥
a        
b     
c    
a     
b     
c    
a     
b     
c    
a
密文
H        
f     
n    
l     
p     
y    
o     
s     
n    
d

 

 

 

输入

 

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

 

输出

 

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

  

 

样例输入

 

CompleteVictory
Yvqgpxaimmklongnzfwpvxmniytm

 

样例输出

 

Wherethereisawillthereisaway

 

提示

 

 

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

都仅包含英文字母。

 

 

代码:

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<iostream>
 4 using namespace std; 
 5 const int Maxv = 1010;
 6 
 7 int main(){
 8     
 9     char wd1[Maxv], wd2[Maxv] ; 
10     scanf("%s%s", wd1 + 1, wd2 + 1); 
11     int len1 = strlen(wd1 + 1); 
12     int len2 = strlen(wd2 + 1); 
13     for (int i = 1, j = 1; i <= len2; i++, j++) {
14         int ans = 0; 
15         if (j > len1) {
16             j = 1; 
17         }
18         if (wd1[j] >= A && wd1[j] <= Z) {
19             wd1[j] = wd1[j] - A + a; 
20         }
21         if (wd2[i] >= A && wd2[i] <= Z) {
22             ans = A - a; 
23             wd2[i] = wd2[i] - A + a; 
24         }
25         char c = wd2[i] - (wd1[j] - a);
26         if (!(a <= c && c <= z)) {
27             c += 26; 
28         }
29         putchar(c + ans); 
30     }
31     return 0; 
32 }

 

[字符串][NOIP2012]Vigenère密码

标签:忽略   div   The   code   lsp   ret   P20   style   body   

原文地址:https://www.cnblogs.com/GldHkkowo/p/8886323.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!