古典密码体制的统计分析—— Vigenere密码

简介: 本实验带您实现Vigenere密码的加密和解密算法。

古典密码体制的统计分析—— Vigenere密码

1. 创建资源

开始实验之前,您需要先创建实验相关资源。

在实验室页面,单击创建资源。

(可选)在实验室页面左侧导航栏中,单击云产品资源列表,可查看本次实验资源相关信息(例如IP地址、子用户信息等)。

说明:资源创建过程需要3~5分钟视资源不同开通时间有所差异,ACK等资源开通时间较长。完成实验资源的创建后,您可以在云产品资源列表查看已创建的资源信息,例如:子用户名称、子用户密码、AK ID、AK Secret、资源中的项目名称等。

实验环境一旦开始创建则进入计时阶段,建议学员先基本了解实验具体的步骤、目的,真正开始做实验时再进行创建。

资源创建成功,可在左侧的资源卡片中查看相关资源信息以及RAM子账号信息

2. 背景知识

背景知识

Vigenere 密码是提高单字母表密码安全性的思路之一。

加密

以 FUDAN 为关键词,明文为 THEBASICOFCRYPTOGRAPHY (The Basic of Cryptography),举例说明 Vigenere 密码的加密过程:

构建密钥

密钥与明文等长,循环重复关键词。

明文:THEBASICOFCRYPTOGRAPHY

密钥:FUDANFUDANFUDANFUDANFU

对照字母表编写密文

根据密钥字母,在字母表中找到对应行;

根据明文字母,在字母表中找到对应列;

由已知明文 T 和密钥 F 得出密文 Y

解密

解密过程与加密过程相反。

算法实现

若用 0-25 的整数与 A-Z 的 26 个字母一一对应,P 为明文,C 为密文,K 为密钥,那么可以将加密算法和解密算法写成:

例如已知明文 T,密钥 F,如果 T 为19,F 为5,密文即为 (19+5) mod 26 = 24,对应字母为 Y,所以密文为 Y。(提示:可以借助ASCII码在数字和字母之间转换,也可以发挥自己的想法用字典、列表或数组存储相关关系)

参考资料

Vigenère cipher

Kasiski examination

Index of coincidence

维吉尼亚密码

3. 实验内容

实验内容

给定密钥,用 C/C++/Python 实现 Vigenere 密码的加密和解密算法;(提供测试用例帮助同学们检测代码的准确性,原则上使用的编程语言不限,要求工作量相近)

加密测试用例(明文为THEBASICOFCRYPTOGRAPHY,密钥为SECURITY)

输入:THEBASICOFCRYPTOGRAPHY SECURITY

输出:LLGVRABAGJELPXMMYVCJYG

解密测试用例(密文为YBHBNXCFOSHLBPGTAUACMS,密钥为FUDAN)

输入:YBHBNXCFOSHLBPGTAUACMS FUDAN

输出:THEBASICOFCRYPTOGRAPHY

解密文档 lab1-1_input.txt (提示:密钥为 CRYPTOGRAPHY),输出的结果保存在lab1-1_output.txt 中,并将其中包含的信息写入报告的实验结果中。请同学们自行创建文件并将其中包含的信息写入报告的实验结果中

4. 拓展实验

拓展实验

分别实现使用 Kasiski 测试 和 Friedman 测试破解密码长度的算法。

有兴趣的同学可以完成,非强制性要求,且不计分。

破解 Vigenere 密码

破译 Vigenere 密码虽然不能直接使用频率分析,但由于密钥循环反复,当得知密钥长度时,可利用类似于 Caesar 密码的方法破解。 密钥长度的破解可通过以下两种方法: Kasiski 测试 & Friedman 测试。

Kasiski 测试

原理是常用单词或高频出现的单词片段,可能被同样的密钥字母进行加密。当密文足够长时,包含该信息更多,更有可能推断出密钥长度。例如:

密钥: ABCDABCDABCDABCDABCDABCDABCD

明文: CRYPTOISSHORTFORCRYPTOGRAPHY

密文: CSASTPKVSIQUTGQUCSASTPIUAQJB

相隔 16 个字符出现相同字符片段,密钥有可能是 16 的约数(16,8,4,2)。当密文长度足够长时,还能找到其他的重复片段,取其公约数,即可确定密钥长度。

Friedman 测试

定义重合指数来描述字母在频率分布上的不匀性,从而破译密码。

其中,𝑐是指字母表的长度(英语中为 26),𝑁指密文文本的长度,𝑛1到𝑛𝑐到是指密文的字母频数, 为整数。得到重合指数 IC 后,可用以下公式估计密钥长度:

其中,𝐿是密钥长度,𝑘𝑝为目标语言中两个任意字母相同的概率(在英文中𝑘𝑝约为 0.655),

𝑘𝑟 为字母表中出现相同字母的概率(在英文字母表中,𝑘𝑟 =1/26=0.0385)

已知密钥长度后,可按照密钥长度重新改写密文,对于被密钥中同一个位置加密的密文,即可单独做类似于 Caesar 密码的字母频率分析破译,从而推断出密钥中的每个字母。

实验链接:https://developer.aliyun.com/adc/scenario/ac09c818ce5a4d7794378c02904a531e

相关文章
多线程实例练习题~
多线程实例练习题~
259 0
|
监控 Linux 虚拟化
在Linux中,如何配置和使用Xen?
在Linux中,如何配置和使用Xen?
|
前端开发 JavaScript Java
基于Java+Springboot+Vue开发的新闻管理系统
基于Java+Springboot+Vue开发的新闻管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Java编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Java的新闻管理系统项目,大学生可以在实践中学习和提升自己的能力,为以后的职业发展打下坚实基础。
709 3
基于Java+Springboot+Vue开发的新闻管理系统
|
算法 安全 数据安全/隐私保护
TLS 1.3 相比 TLS 1.2 在性能上有哪些具体的提升?
【10月更文挑战第4天】TLS 1.3 相比 TLS 1.2 在性能上有哪些具体的提升
|
数据安全/隐私保护
BUUCTF [ACTF新生赛2020]swp 1
BUUCTF [ACTF新生赛2020]swp 1
508 1
|
存储 设计模式 缓存
Nacos 服务端注册、客户端服务发现源码分析(二)
Nacos 服务端注册、客户端服务发现源码分析(二)
635 1
|
机器学习/深度学习 算法 安全
密码学系列之三:DES、AES、IDEA —— 一文搞懂分组密码
密码学系列之三:DES、AES、IDEA —— 一文搞懂分组密码
3265 0
|
程序员 Shell C语言
【C/C++ main函数】深入探索C++中的main函数及其参数
【C/C++ main函数】深入探索C++中的main函数及其参数
1752 0
BUUCTF john-in-the-middle 1
BUUCTF john-in-the-middle 1
454 0
|
存储 开发工具
CASE 工具有哪些
<h2 style="color:rgb(18,18,20); font-weight:normal; letter-spacing:-1px; margin:0.2em 0.2em 0.2em 0px; font-size:1.7em; line-height:1.5em; padding:0px; position:relative; left:0px; font-family:Ver
4332 0