【维吉尼亚密码编写】

1. Equipment

(1) operating system version :WIN 10

(2) CPU instruction set: x 64

(3) software :Visual Studio 2019

2. process
  • Problem background analysis

Playfair密码编写(或者采用维吉尼亚密码编写,输入明文长度是任意的)

明文:量子通信保密技术的诞生和快速发展主要取决于以下两个因素: a、经典保密通信面临着三个难以彻底解决的关键问题,即密钥协商、身份识别和窃听检测,这些问题的有效解决需要新技术。b、在对新技术的探索中,人们发现了量子内在的安全特性及其可能的应用。
请写出你的密码机输出结果。

​ 可以采用Playfair密码或者Vigenère密码,这里我采用的是Vigenère cipher完成信息加密。

​ 在Vigenere密码中,用户钥是一个有限序列,我们可以通过周期性(周期为d)将k扩展为无限序列,其中Ki=K(i mod d),从而得到工作钥。如果用Φ和θ分别表示密文和明文字母,则Vigenere密码的变换公式为:Φ≡(θ+ki)(mod n)该密码体制有一个参数n。

​ 在加解密时,同样把英文字母映射为0~25的数字再进行运算,并按一组进行变换。明文空间、密文空间及密钥空间都是长度为n的英文字母串的集合。对应的密码表如下:

  • Solution

根据上述的原理,采用C++实现如下:


code:

#include <iostream>
#include <string>
#include <string.h>
#pragma warning(disable:4996)
/** @Author:timerring* @Date: 2021-10-20 14:05:49* @LastEditTime: 2021-10-22 08:11:15* @FilePath:c:\Users\timerring\Vigenere.cpp*/
using namespace std;
const int N = 26;
//定义二维密码表
char v[N][N] = { {'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'} };
int number(char x)
{//把行号字母对应到数字空间上char y = 'a';for (int i = 0; i < N; i++){if (x == (y + i)) return i;}
}
void encryption(string msg, string key)
{//定义加密过程cout << "plaintext:";cin >> msg;cout << "key:";cin >> key;int mlen, klen;//获取明文和密钥的长度mlen = msg.length();klen = key.length();char* p, * q, * t;//明文,初始密钥,密钥串//把string换成charp = new char[msg.length() + 1];//用strcpy函数进行对应的复制strcpy(p, msg.c_str());q = new char[key.length() + 1];strcpy(q, key.c_str());t = new char[msg.length() + 1];int j = 0;for (int i = 0; i < mlen; i++){t[i] = q[j];j++;j = j % klen;}cout << "ciphertext:";for (int i = 0; i < mlen; i++)//按位输出密文字符cout << v[number(t[i])][number(p[i])];cout << endl;
}
void decryption(string c, string key)
{//定义解密过程cout << "ciphertext:";cin >> c;cout << "key:";cin >> key;int clen, klen;clen = c.length();klen = key.length();char* p, * q, * t;//密文,初始密钥,密钥串//将string换成charp = new char[c.length() + 1];//用strcpy函数进行对应的复制strcpy(p, c.c_str());q = new char[key.length() + 1];strcpy(q, key.c_str());t = new char[c.length() + 1];int j = 0;for (int i = 0; i < clen; i++){t[i] = q[j];j++;j = j % klen;}//生成密钥cout << "plaintext:";for (int i = 0; i < clen; i++)for (int j = 0; j < N; j++)if (v[number(t[i])][j] == p[i]) { cout << char(j + 97); break; }cout << endl;
}
int main()
{for (int i = 1; i < N; i++){for (int j = 0; j < N; j++){v[i][j] = v[i - 1][(j + 1) % N];}//将方阵进行初始化}cout << "You are welcome to use Vigenere in SDU\n" << endl;cout << "Please enter the corresponding operation number:" << endl;int flag;do {cout << "1.Encrypt\n2.Decrypt\n";cin >> flag;string m, key;if (flag == 1)encryption(m, key);else if (flag == 2) decryption(m, key);elsebreak;} while (flag != 3);return 0;
}

Test sample:

由Vigenere密码的基本原理可知,它未能完成中文密码的编写,因此我们采用将明文翻译为英语,再对其进行加密,样例中取密钥为sduqingdao,密码机的输出如下:


3. summary and harvest

​ 我对于Vigenère密码的理解加深了,Vigenère密码通过使用多个字母代换表,达到同一个字母在不同位置会被替换成不同密文的效果,方法是用一个密钥选择使用哪个字母代换表,依次使用多个字母表,当密钥的字母使用结束的时候再从头排列。

​ 这样的密码比单表代换安全系数略高,可以通过加长密钥的方式确保相对的安全性。通过简单的密码分析破译的难度略大,但是如果密文足够长,其间会有大量重复的密文序列出现。通过计算重复密文序列间距的公因子,分析者可能猜出密钥词的长度。同时通过查阅文献找到了它的破译方法 [1] ,可以使用卡西斯基试验和弗里德曼试验来得到密钥的长度,一旦能够确定密钥的长度,密文就能重新写成多列,列数与密钥长度对应。这样每一列就是一个凯撒密码,而此密码的密钥则对应于Vigenère密码密钥的相应字母。使用与破译凯撒密码类似的方法,就能将密文破译。

​同时我也遇到了一些困难,在使用strcpy函数进行字符复制的时候,编译器报错, ‘strcpy’: This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details,通过查询,得知是因为strcpy的安全性不高,可以采用两种方法解决:1.使用strcpy_s函数 2.使用#pragma预处理命令禁止警告

4.Reference

[1]杨振,杨帆,夏山,高钏淏,万贺.一种基于卡西斯基试验的密钥破译算法分析[J].网络安全技术与应用,2020(10):52-55.

初学信息安全,可能存在错误之处,还请各位不吝赐教。

受于文本原因,本文相关算法实现工程无法展示出来,现已将资源上传,可自行点击下方链接下载。

维吉尼亚密码原理详解及算法实现工程文件

维吉尼亚密码原理详解及算法实现相关推荐

  1. 维吉尼亚密码原理、代码

    1.使用维吉尼亚密码的原因 (1)单表代换密码的安全性不高,一个原因是一个明文字母只有一个密文字母代替 (2)构造多个密文字母表,在密钥的控制下用相应密文字母表中的一个字母来代替明文字母表中的一个字母 ...

  2. 维吉尼亚密码原理图解

    维吉尼亚密码引入了"密钥"的概念,即根据密钥来决定用哪一行的密表来进行替换,以此来对抗字频统计.假如以上面第一行代表明文字母,左面第一列代表密钥字母,对如下明文加密: TO BE ...

  3. 维吉尼亚密码详解及C语言实现

    维吉尼亚密码详解及C语言实现 文章目录 维吉尼亚密码详解及C语言实现 0x01 维吉尼亚密码 0x02 维吉尼亚密码原理 0x03 维吉尼亚密码CTF题目 0x04 C语言实现 图片地址:https: ...

  4. 维吉尼亚密码 (原理+代码)

    目录 1.原理 2.流程图 3.编程实现 4.总结 1.原理         维吉尼亚密码(又译维热纳尔密码)是使用一系列凯撒密码组成密码字母表的加密算法,属于多表密码的一种简单形式. 1508年时, ...

  5. 维吉尼亚密码破解(Python完整详细源码)

    维吉尼亚密码破解(Python完整详细源码) 欢迎大家访问我的GitHub博客 https://lunan0320.github.io/ 文章目录 维吉尼亚密码破解(Python完整详细源码) 1.写 ...

  6. 维吉尼亚c语言编码原理,维吉尼亚密码的C语言实现

    维吉尼亚密码的C语言实现 2016春 密码学原理 软件学院 密码学原理作业报告 作业1:古典密码体制的实践与分析 姓名 查志华 院系 软件学院 学号 1133710313 任课教师 刘绍辉 指导教师 ...

  7. 【密码学原理与实践】(四)维吉尼亚密码 符java代码实现

    维吉尼亚密码(Vigenere Cipher) 转载请著明出处 无论是移位密码还是代换密码,一旦秘钥被选定,则每个字母对应的数字都被加密变换成对应的唯一数字.我们称这种为单表代换密码,而本篇讲的是一种 ...

  8. 维吉尼亚密码和一次性密码本_密码学中的一次性密码

    维吉尼亚密码和一次性密码本 The One-time Pad cipher is almost similar to the Vernam cipher, as, like the vernam ci ...

  9. 实验吧-密码学-杯酒人生(特殊凯撒--维吉尼亚密码)(凯撒加解密脚本、维吉尼亚密码加解密脚本)...

    题目: 使用古典密码 一喵星人要想喵星发送一段不知道干什么用的密码"BLOCKCIPHERDESIGNPRINCIPLE", 但是它忘记了密钥是什么, 手头(爪头)只有它自己加密过 ...

  10. 密码学笔记——维吉尼亚密码

    维吉尼亚密码 一.简介 维吉尼亚密码是使用一系列凯撒密码组成密码字母表的加密算法,属于多表密码的一种简单形式. 二.加密算法 直接拿例子来说,比如我要加密一段明文        明文:THISISTO ...

最新文章

  1. 全网最全的Windows下Anaconda2 / Anaconda3里正确下载安装用来定时任务apscheduler库(图文详解)...
  2. python csdn技术社区_CSDN.NET - 全球最大中文IT社区,为IT专业技术人员提供最全面的信息传播和服务平台...
  3. 回溯python_用Python回溯算法
  4. vue组件化通信之子向父传值
  5. 前端学习(1668):前端系列实战课程之限制范围拖拽思路
  6. 内核并发控制---信号量 (来自网易)
  7. Spark中RDD与DataFrame与DataSet的区别与联系
  8. oracle连接工具类,c# .net oracle连接工具类
  9. Numpy——numpy属性
  10. 如何处理iOS中照片的方向
  11. anaconda必须安装在c盘吗_Anaconda及tensorflow、pytorch安装记
  12. 使用正则test方法遇到的问题
  13. spring切点表达式提取jdk版本与aspectjweaver版本不匹配
  14. 文字栅格化剪切蒙版——创建文字遮罩效果的两种方法——梦幻游乐园
  15. EMC、EMI、ESD、EMS区别 最清晰的解释送给你
  16. caiguai docker-xware_黑科技——通过docker+xware在群辉DSM 6.0系统实现迅雷远程下载-Go语言中文社区...
  17. Python爬取《扫黑风暴》腾讯视频弹幕
  18. 系统常见电脑蓝屏原因以及解决方法
  19. vue element 表格增加删除修改数据
  20. 视频去除水印,只需两分钟随时学会

热门文章

  1. 89c51c语言程序,AT89C51单片机流水灯c语言程序及详解
  2. jest : 无法加载文件 C:\Users\Administrator\AppData\Roaming\npm\jest.ps1,因为在此系统上禁止运行脚本
  3. 瞬态二极管,有哪些?
  4. python取系统日期前一天_python 获取前一天或前N天的日期
  5. invalid operands to binary expression 二进制表达式的无效操作数
  6. 文件没保存怎么恢复?3种方法恢复未保存office文档
  7. LFS8.0完全安装搭建制作教程
  8. 多重中介效应的示例数据(内附STATA代码)
  9. 弘辽科技:DSR的含义是?怎么提升DSR评分?
  10. cam_lidar_calib激光雷达和相机联合标定