一、多表代换

多表代换密码跟单表代换密码的区别,主要是,多表代换的代换表有多个。对于加密,交替使用不同的代换表。注意,加密和解密要同步,也就是,加密和解密所用的代换表顺序要一致,不然,解密会出错。
多表代换跟单表代换相比,其主要优点是,多表代换增大了密钥空间,打乱了整体上的统计特性。
举一个简单的例子:
假设明文字符集为{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

多表代换和维吉尼亚密码相关推荐

  1. Android实现信息安全中维吉尼亚密码技术

    人们在单一恺撒密码的基础上扩展出多表密码,称为"维吉尼亚"密码.是法国密码学家维吉尼亚在1586年提出的一种多表替代密码,维吉尼亚密码引入了"密钥"的概念,即根 ...

  2. 古典密码(单表密码,维吉尼亚密码,普莱费尔密码,一次一密)

    古典密码 1.单表密码(仿射加密) 仿射加密变化是:y=ax+b 算法: 仿射密码是一种表单代换密码,字母表的每个字母相应的值使用一个简单的数学函数对应一个数值,再把对应数值转换成字母. A B C ...

  3. MTALAB实现多表代替密码(维吉尼亚密码)

    维吉尼亚密码(又译维热纳尔密码)是使用一系列凯撒密码组成密码字母表的加密算法,属于多表密码的一种简单形式. 设d为一固定的正整数,d个位移代换表π=(π1,π2,-,πd),由密钥序列K=(k1,k2 ...

  4. python 古典密码第一弹(凯撒密码,Playfair密码,维吉尼亚密码)

    各位白嫖-漂亮大哥哥姐姐们好,在下菜鸡一枚,主要想在这和大家一起探讨学习之道,一起愉快的学习密码学基础.总所周知,密码学学的好,头发掉的少... 直接进入正题,今天我就主要讲三个密码,而且都是古典密码 ...

  5. 信息安全——维吉尼亚密码算法(C++实现)

    信息安全导论课程学习的实验一,维吉尼亚密码算法C++的实现. 维吉尼亚密码算法是一种代换密码算法,直观上来说,密钥一般短于明文长度,因此加密时需要将明文根据密钥长度进行分组,每一组明文根据密钥对应(0 ...

  6. 密码学(二):古典密码之维吉尼亚密码的破解

    维吉尼亚密码的破解 一.引言   上一章我们介绍了维吉尼亚密码的原理,是通过移位替换的加密方法进行加密,但是因为概率论的出现这种简单的移位或替换就容易破解了,其原理很简单,英文中字母出现的频率是不一样 ...

  7. 古典密码之“维吉尼亚密码”

    简述 维吉尼亚密码是在代换密码(即单表代换)基础上,衍生出来的多表代换密码. 与单表代换相同,维吉尼亚密码也采用明文字母与密钥字母(即26字母表)间建立一一对应关系. 但是不同的是,单表代换密码中一旦 ...

  8. 密码学——维吉尼亚密码

    文章目录 前言 一.维吉尼亚密码简介 二.维吉尼亚算法 1.加密算法 2.解密算法 3.主函数 总结 前言 本内容为博主学习维吉尼亚密码的笔记,如有错误,烦请指正. 一.维吉尼亚密码简介 维吉尼亚密码 ...

  9. 维吉尼亚密码Java实现

    维吉尼亚密码是一种古典密码,属于代换密码,而且是多表代换密码. 密文对应的字母数字=明文对应的字母数字+密钥对应的字母数字 例如: 明文abcde,密钥abcd,对应的密文就是bdfhf,第五个明文e ...

最新文章

  1. python编程入门教学电子书-Python编程入门电子书教程,看这几个就够了
  2. IOS-C语言第11天,Dynamic Memory(动态
  3. 查询删除的外向交货单
  4. tomcat启动时错误:Cannot rename original file to *.tomcat-users.xml.old
  5. 从fread和mmap 谈读文件的性能
  6. json中omitempty字段的使用
  7. Kubernetes中分布式存储Rook-Ceph部署快速演练
  8. 贪心算法—圣诞老人的礼物(POJ 4110)
  9. 微课|玩转Python轻松过二级(3.1节):列表常用方法
  10. Ubuntu18.04 下载与安装(阿里云官方镜像站)
  11. WKWebView OC与JS交互
  12. 海思芯片MPP工作流程
  13. 如何想领导说清楚DCMM到底有什么好处?
  14. 乓乓响冲刺港股:年营收2.2亿 核心收入靠给幼儿园供餐
  15. gitea/gogs忘记密码后重置密码
  16. Object Detection with Discriminatively Trained Part Based Models(使用判别训练的部件模型进行目标检测 )
  17. 第19篇 基础(十九)详解QVector(数组)
  18. Pyinstaller将yolov5的detect.py封装成detect.exe,并用C++调用
  19. CactiEZ 中文版V10.1安装使用以及139邮箱短信报警设置
  20. (干货)关于发布劳动合同示范文本的说明

热门文章

  1. 对批改网的fuzz测试
  2. servlet中请求转发forword与重定向redirect区别
  3. JAVA开发(JAVA中的池)
  4. 上证50ETF期权在的开户条件
  5. Js apply方法详解
  6. Python 进程池之阻塞模式
  7. 面向对象和C++基础—面向对象(构造与析构函数篇)
  8. 头歌--C++ 面向对象 - 构造函数与析构函数
  9. 高通repeater模式比较
  10. IPADmini上的访问限制打开了,忘记了密码怎么办?