08:Vigenère密码
时间:2022-05-07
本文章向大家介绍08:Vigenère密码,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
08:Vigenère密码
总时间限制: 1000ms 内存限制: 65536kB描述
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 |
输入输入共2行。 第一行为一个字符串,表示密钥k,长度不超过100,其中仅包含大小写字母。第二行为一个字符串,表示经加密后的密文,长度不超过1000,其中仅包含大小写字母。 对于100%的数据,输入的密钥的长度不超过100,输入的密文的长度不超过1000,且都仅包含英文字母。输出输出共1行,一个字符串,表示输入密钥和密文所对应的明文。样例输入
CompleteVictory
Yvqgpxaimmklongnzfwpvxmniytm
样例输出
Wherethereisawillthereisaway
来源NOIP2012复赛 提高组 第一题
1 #include<iostream>
2 #include<cstring>
3 #include<cstdio>
4 #include<cmath>
5 using namespace std;
6 char my[10001];//密钥
7 char miwen[1001];//密文
8 char mingwen[1001];//明文
9 char zd[101][101];//储存明文密文密钥的字典
10 int yn1[1001];//是否需要-32
11 int main()
12 {
13 scanf("%s",&my);
14 scanf("%s",&miwen);
15 int lmy=strlen(my);//密钥的长度
16 int lmiwen=strlen(miwen);//明文的长度
17 for(int i=1;i<=26;i++)
18 {
19 char bg=(char)(i+64);
20 for(int j=1;j<=26-i+1;j++)
21 {
22 zd[i][j]=bg;
23 bg++;
24 }
25 }//建立字典
26 for(int i=2;i<=26;i++)
27 {
28 char bg=64;
29 for(int j=26-i+1;j<=26;j++)
30 {
31 zd[i][j]=bg;
32 bg++;
33 }
34 }
35 for(int i=0;i<lmy;i++)
36 {
37 if(my[i]>=90&&my[i]<=122)
38 my[i]=my[i]-32;
39 }//将密钥全部转换为大写字母
40 for(int i=0;i<lmiwen;i++)
41 {
42 if(miwen[i]>=97&&miwen[i]<=122)
43 {
44 miwen[i]=miwen[i]-32;
45 yn1[i]=1;
46 }
47 }//将密文全部转换为大写字母
48 int cs=lmiwen/lmy+1;
49 while(cs!=1)
50 {
51 strncat(my,my,lmy);
52 cs--;
53 }//将密钥复制到足够长
54 /*for(int i=1;i<=26;i++)
55 {
56 for(int j=1;j<=26;j++)
57 {
58 cout<<zd[i][j]<<" ";
59 }
60 cout<<endl;
61 }//建立字典 */
62 for(int i=0;i<lmiwen;i++)
63 {
64 int amy=(int)my[i];//密文对应密钥的ascll码表
65 int amw=(int)miwen[i];//第i个密文的ascll码表
66 if(amy<=amw)
67 {
68 if(yn1[i]==1)
69 {
70 cout<<(char)(amw-amy+65+32);
71 }
72 else cout<<(char)(amw-amy+65);
73 }
74 else
75 //cout<<(char)(amy-amw+73);
76 {
77 int now=0;
78 for(int j=1;j<=26;j++)
79 {
80 if(zd[26][j]==amw)
81 {
82 now=26+j;
83 break;
84 }
85 }
86 if(yn1[i]==1)
87 {
88 cout<<char((now-(amy-64))+64+32);
89 }
90 else cout<<char((now-(amy-64))+64);
91 }
92 }
93 return 0;
94 }
- jackson简单使用,对象转json,json转对象,json转list
- 2016.07 第3周 群问题分享
- jackson error 含义log
- java删除文件夹
- JSP自定义tag
- gradle中使用嵌入式(embedded) tomcat, debug 启动
- spring in action 4th --- quick start
- Date, TimeZone, MongoDB, java中date的时区问题
- spring boot 添加拦截器
- spring boot 部署为jar
- 重定向Http status code 303 和 302
- centos7查看系统版本,查看机器位数x86-64
- 在centos7中添加一个新用户,并授权
- 如何优化coding
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Nginx + Spring Boot 实现负载均衡
- 小书MybatisPlus第2篇-条件构造器的应用及总结
- 一个案例演示 Spring Security 中粒度超细的权限控制!
- 信息收集之主机发现:nmap
- 文本文件逐行处理–用java8 Stream流的方式
- 使用java8API遍历过滤文件目录及子目录及隐藏文件
- 使用位运算、值交换等方式反转java字符串-共四种方法
- 精讲RestTemplate第2篇-多种底层HTTP客户端类库的切换
- 精讲RestTemplate第1篇-在Spring或非Spring环境下如何使用
- 在图中添加多边形
- 设置坐标轴刻度的位置和样式
- OkHttp透明压缩,收获性能10倍,外加故障一枚
- 体验spring-boot-devtools热部署,流畅且不失强大
- 【每周一库】 simsearch - a simple and lightweight fuzzy search engine
- 手把手教你实现xxl-job分布式任务调度平台搭建