维吉尼亚密码c语言实现

维吉尼亚密码实现

Vigenère密码简介

维吉尼亚密码是一种是最简单的多表替换密钥,由多个凯撒替换表循环构成 。

  • 密钥
    ◦K=K0 K1 … Kd-1
    ◦ 第i位密钥 Ki 表示采用 K=Ki 的凯撒替换表
    ◦ 密钥重复使用
  • 加密算法:Ci = E(K, Pi) = (Pi + Ki mod d) mod 26
  • 解密算法:pi = D(K, Ci) = (Ci - Ki mod d) mod 26
  • 举一个简单的栗子
    -密钥:yier
    -明文:vige nere cyph er
    -密钥:yier yier yier yi
    -密文:tqkv lmvv agty cz

代码示范

注:本代码要求输入的明文、密文、密钥均为无空格的英文小写字符串。

#include <stdio.h>
#include <stdlib.h>
#include <string>
int main()
{
	char mingwen[1000]="/0";
	char miwen[1000]="/0";
	char key1[100]="/0";
	int num=0,keynum=0;
	int signal = 1;
	printf("加密还是解密?加密1,解密0\n");
	scanf_s("%d", &signal);
	getchar();//吞掉前面scanf剩下的一个回车,若没有此句,下面的gets语句直接读取回车就会结束
	if (signal) {
		printf("请输入密钥:(要求小写英文字母且无空格,输入结束按回车键)\n");
		
		gets_s(key1);
		keynum = strlen(key1);//密钥长度

		printf("请输入明文:\n");
		gets_s(mingwen);
		int mingnum;
		mingnum = strlen(mingwen);//明文长度

		//加密
		int i = 0;
		for (i = 0; i < mingnum; i++)
		{
			miwen[i] = (mingwen[i] - 'a' + key1[i % keynum] - 'a') % 26 + 'a';

		}
		printf("密文是: %s \n", miwen);
	}
	else {
		printf("请输入密钥:(要求小写英文字母且无空格,输入结束按回车键)\n");

		gets_s(key1);
		keynum = strlen(key1);//密钥长度

		printf("请输入密文:\n");//agtycz
		gets_s(miwen);
		int minum;
		minum = strlen(miwen);//明文长度

		//加密
		int i = 0;
		for (i = 0; i < minum; i++)
		{
			mingwen[i] = (miwen[i] - key1[i % keynum] + 26 ) % 26 + 'a';

		}
		printf("明文是: %s \n", mingwen);
	}
	
	system("pause");	

} 

如果本篇博客对你有帮助,可不可以给我点个赞留个言,第一次写博客,还是希望看到的小伙伴给我点个赞的嘿嘿~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值