多表代换和维吉尼亚密码
一、多表代换
多表代换密码跟单表代换密码的区别,主要是,多表代换的代换表有多个。对于加密,交替使用不同的代换表。注意,加密和解密要同步,也就是,加密和解密所用的代换表顺序要一致,不然,解密会出错。
多表代换跟单表代换相比,其主要优点是,多表代换增大了密钥空间,打乱了整体上的统计特性。
举一个简单的例子:
假设明文字符集为{1,2,3,4};
代换表1为{1:2,2:4,3:3,4:1};
代换表2为{1:4,2:1,3:2,4:3}。
代换表1和代换表2交替使用。
现在加密123112。
1 | 2 | 3 | 1 | 1 | 2 | |
---|---|---|---|---|---|---|
表1 | 2 | – | 3 | – | 2 | – |
表2 | – | 1 | – | 4 | – | 1 |
密文为213421。
同一明文字符最多出现了3次,而密文中则为2次。其统计特性发生了变化。
多表代换的密钥不仅仅是代换表,还有代换表的使用顺序和代换表的个数(也叫做周期)。
如果上述加密先使用代换表2,则结果为:
1 | 2 | 3 | 1 | 1 | 2 | |
---|---|---|---|---|---|---|
表1 | – | 4 | – | 2 | – | 4 |
表2 | 4 | – | 2 | – | 4 | – |
这样,明文字符出现了4个,而密文中只有两种字符。
二、维吉尼亚密码
维吉尼亚密码是最简单的多表代换密码,由多个凯撒移位密码组成。其明文字符集为a~z,26个英文字母。将字母按顺序循环移位k个,形成一个代换表。
下面是一个简单的实现:
#include<iostream>
#include<vector>
using namespace std;
//encrypt
string encrypt(string message,vector<int> &key){for(int i=0;i<message.size();i++){message[i]=(message[i]-'a'+key[i%key.size()])%26+'a';}return message;
}
//decipher
string decipher(string cipher,vector<int> &key){vector<int> k1=key;for(int i=0;i<key.size();i++){k1[i]=26-key[i];}return encrypt(cipher,k1);
}
int main(){vector<int> key={3,7,2};string message,cipher;cout<<"Please enter the message:";cin>>message;cipher=encrypt(message,key);cout<<"The ciphertext is:"<<cipher<<endl;cout<<"After decipher:"<<decipher(cipher,key)<<endl;
}
测试样例:
Please enter the message:iloveyou
The ciphertext is:lsqylarb
After decipher:iloveyou
多表代换和维吉尼亚密码相关推荐
- Android实现信息安全中维吉尼亚密码技术
人们在单一恺撒密码的基础上扩展出多表密码,称为"维吉尼亚"密码.是法国密码学家维吉尼亚在1586年提出的一种多表替代密码,维吉尼亚密码引入了"密钥"的概念,即根 ...
- 古典密码(单表密码,维吉尼亚密码,普莱费尔密码,一次一密)
古典密码 1.单表密码(仿射加密) 仿射加密变化是:y=ax+b 算法: 仿射密码是一种表单代换密码,字母表的每个字母相应的值使用一个简单的数学函数对应一个数值,再把对应数值转换成字母. A B C ...
- MTALAB实现多表代替密码(维吉尼亚密码)
维吉尼亚密码(又译维热纳尔密码)是使用一系列凯撒密码组成密码字母表的加密算法,属于多表密码的一种简单形式. 设d为一固定的正整数,d个位移代换表π=(π1,π2,-,πd),由密钥序列K=(k1,k2 ...
- python 古典密码第一弹(凯撒密码,Playfair密码,维吉尼亚密码)
各位白嫖-漂亮大哥哥姐姐们好,在下菜鸡一枚,主要想在这和大家一起探讨学习之道,一起愉快的学习密码学基础.总所周知,密码学学的好,头发掉的少... 直接进入正题,今天我就主要讲三个密码,而且都是古典密码 ...
- 信息安全——维吉尼亚密码算法(C++实现)
信息安全导论课程学习的实验一,维吉尼亚密码算法C++的实现. 维吉尼亚密码算法是一种代换密码算法,直观上来说,密钥一般短于明文长度,因此加密时需要将明文根据密钥长度进行分组,每一组明文根据密钥对应(0 ...
- 密码学(二):古典密码之维吉尼亚密码的破解
维吉尼亚密码的破解 一.引言 上一章我们介绍了维吉尼亚密码的原理,是通过移位替换的加密方法进行加密,但是因为概率论的出现这种简单的移位或替换就容易破解了,其原理很简单,英文中字母出现的频率是不一样 ...
- 古典密码之“维吉尼亚密码”
简述 维吉尼亚密码是在代换密码(即单表代换)基础上,衍生出来的多表代换密码. 与单表代换相同,维吉尼亚密码也采用明文字母与密钥字母(即26字母表)间建立一一对应关系. 但是不同的是,单表代换密码中一旦 ...
- 密码学——维吉尼亚密码
文章目录 前言 一.维吉尼亚密码简介 二.维吉尼亚算法 1.加密算法 2.解密算法 3.主函数 总结 前言 本内容为博主学习维吉尼亚密码的笔记,如有错误,烦请指正. 一.维吉尼亚密码简介 维吉尼亚密码 ...
- 维吉尼亚密码Java实现
维吉尼亚密码是一种古典密码,属于代换密码,而且是多表代换密码. 密文对应的字母数字=明文对应的字母数字+密钥对应的字母数字 例如: 明文abcde,密钥abcd,对应的密文就是bdfhf,第五个明文e ...
最新文章
- python编程入门教学电子书-Python编程入门电子书教程,看这几个就够了
- IOS-C语言第11天,Dynamic Memory(动态
- 查询删除的外向交货单
- tomcat启动时错误:Cannot rename original file to *.tomcat-users.xml.old
- 从fread和mmap 谈读文件的性能
- json中omitempty字段的使用
- Kubernetes中分布式存储Rook-Ceph部署快速演练
- 贪心算法—圣诞老人的礼物(POJ 4110)
- 微课|玩转Python轻松过二级(3.1节):列表常用方法
- Ubuntu18.04 下载与安装(阿里云官方镜像站)
- WKWebView OC与JS交互
- 海思芯片MPP工作流程
- 如何想领导说清楚DCMM到底有什么好处?
- 乓乓响冲刺港股:年营收2.2亿 核心收入靠给幼儿园供餐
- gitea/gogs忘记密码后重置密码
- Object Detection with Discriminatively Trained Part Based Models(使用判别训练的部件模型进行目标检测 )
- 第19篇 基础(十九)详解QVector(数组)
- Pyinstaller将yolov5的detect.py封装成detect.exe,并用C++调用
- CactiEZ 中文版V10.1安装使用以及139邮箱短信报警设置
- (干货)关于发布劳动合同示范文本的说明