Vigenere算法原理及加密解密过程c++实现

本文详细介绍了Vigenere密码算法的原理、安全性特点,并通过一个例子展示了加密过程。利用周期性密钥扩展,Vigenere提高了加密安全性。提供了一段C++代码实现加密解密功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Vigenere

本文是对Vigenere算法及实现(c++)进行一个简单介绍~~

背景

在吉奥万·巴蒂斯塔·贝拉索( Giovan Battista Bellaso)于1553年所著的书《吉奥万·巴蒂斯塔·贝拉索先生的密码》(意大利语:La cifra del. Sig. Giovan Battista Bellaso)中,有一种密码算法法名为Vigenere。
相比于传统的单表代换密码,Vigenere在密钥的选取和明文密文的映射上采用多表代换,即每一个明文符号都根据密钥来决定用哪一行的密表来进行替换,以此来对抗字频统计(单表代换可以通过词频统计来进行密钥猜测,很容易破解)。从而极大地提高了算法的安全性。
Vigenere的安全上主要表现在以下两点:
(1)密钥长度越长,越难以破解,因为这是相当于对每一个字符分别进行加密。
(2)如果没有得到密钥,很难对密文进行解密(当然,在超短密钥情况下还是可能进行解密的)。

算法原理

算法原理在很多博客中介绍的还是不错的,也比较简单,下面简单从百科中看一下:
在Vigenere密码中,用户钥是一个有限序列,我们可以通过周期性(周期为d)将k扩展为无限序列,其中Ki=K(i mod d),1≤i≤,从而得到工作钥。
如果用Φ和θ分别表示密文和明文字母,则Vigenere密码的变换公式为:
Φ≡(θ+ki)(mod n)
该密码体制有一个参数n。在加解密时,同样把英文字母映射为0~25的数字再进行运算,并按凡个字母一组进行变换。明文空间、密文空间及密钥空间都是长度为n的英文字母串的集合。

举例

这个例子也是来源于一个博客。
假如以上面第一行代表明文字母,左面第一列代表密钥字母(这个在原博客中我也没找到是什么意思),对如下明文加密:
TO BE OR NOT TO BE THAT IS THE QUESTION
(生存还是毁灭,这是个问题 ——哈姆雷特)
当选定RELATIONS作为密钥时,加密过程是:明文一个字母为T,第一个密钥字母为R,因此可以找到在R行中代替T的为K,依此类推,得出对应关系如下:
密钥:RELAT IONSR ELATI ONSRE LATIO NSREL
明文:TOBEO RNOTT OBETH ATIST HEQUE STION
密文:KSMEH ZBBLK SMEMP OGAJX SEJCS FLZSY

密码表

偶然间得到的一张效果图,感觉彩色很棒:
在这里插入图片描述

代码实现

网上各种语言实现加密解密的都有,这里我找了一个c++版本的,整个结构还是很棒的,另外就是加密和解密过程都有。

#include <iostream>
#include <string>
#include <string.h>
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
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值