古典密码体制的统计分析—— 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

相关文章
|
人工智能 安全 API
MCP协议的具体技术实现原理
MCP(Model Context Protocol)是由Anthropic提出的开放协议,旨在标准化大语言模型(LLM)与外部工具、数据源的交互方式。通过客户端-服务器架构与JSON-RPC通信,实现工具的动态发现、安全调用与灵活扩展,提升LLM的实用性与集成效率。
|
9月前
|
运维 安全 Linux
Linux网络telnet命令详解(小白也能轻松掌握的远程连接与端口测试指南)
本文介绍Linux中telnet命令的使用方法,重点讲解如何通过telnet测试网络端口连通性。尽管telnet因明文传输已不推荐用于远程登录,但在排查服务状态、验证端口开放等方面仍具实用价值。教程涵盖安装、基本语法、实战示例及安全建议,适合初学者快速掌握这一轻量级网络调试工具。
|
10月前
|
人工智能 数据安全/隐私保护 开发者
一条AI指令,解决"发朋友圈不知道写啥"的千古难题
技术人发朋友圈总犯难?项目上线怕炫耀,生活瞬间不知如何表达。其实,用AI辅助写作是个妙招。关键在于给出清晰指令:明确场景、风格与需求,让AI生成真实自然、有温度的文案。本文提供一套即拿即用的AI指令模板,覆盖生活、工作、旅行等六大场景,帮你快速生成不“AI味”的朋友圈内容。省下纠结时间,真诚分享生活,才是正解。
1381 10
|
弹性计算 负载均衡 容灾
slb单点故障风险
【11月更文挑战第3天】
547 52
|
12月前
|
人工智能 JSON 边缘计算
从零开始学MCP(1)| MCP 协议核心原理解析
MCP 协议统一 AI 工具调用标准,解决碎片化、高耦合与上下文丢失问题,采用 Client/Server 架构,支持上下文传递与 SSE 流式响应,提升工具调用效率与灵活性。
|
人工智能 自动驾驶 搜索推荐
AI技术在现代生活中的应用与影响
本文将探讨AI技术在现代生活中的广泛应用,以及它对人们生活方式的影响。我们将从智能家居、自动驾驶汽车、医疗健康、教育等领域出发,分析AI技术如何改变人们的生活。同时,我们也将讨论AI技术可能带来的问题和挑战,以及如何应对这些问题。
|
安全 测试技术 量子技术
量子计算硬件:超导量子比特的最新进展
量子计算作为信息技术的前沿领域,超导量子比特作为其核心组件,近年来取得了显著进展。本文介绍了超导量子比特的基本原理、制造与性能提升、最新技术成果及未来展望,展示了其在密码学、化学和材料科学等领域的潜在应用,预示着量子计算时代的到来。
|
SQL 前端开发 PHP
如何使用PHP开发一个购物网站?
在数字化时代,线上购物日益重要。本文介绍如何使用PHP开发一个功能完善、用户友好的购物网站,涵盖需求分析、开发环境选择、数据库设计、前后端开发、用户认证、商品展示、购物车、订单管理、功能扩展及安全性能优化等环节,旨在提供全面的开发指南。
452 3
|
算法 安全 数据安全/隐私保护
TLS 1.3 相比 TLS 1.2 在性能上有哪些具体的提升?
【10月更文挑战第4天】TLS 1.3 相比 TLS 1.2 在性能上有哪些具体的提升