维吉利亚加密算法 求C或C++源代码 !!急

来源:百度知道 编辑:UC知道 时间:2024/05/16 08:36:58
维吉利亚加密算法
题目描述:试用维吉利亚密码的方法,以ART(不区分大小写)为密钥对任意给定的字母进行加密。原理解析:加密方法:将字母a,b,c…z 对应数字0,1,2……25。明文字母mj,密文cj,密钥ki,cj=mj+ki mod 26 (i=1,2,3)。例如:m="datasecurity"对应数字"3,0,19,0,18,......,19,24";k="best" 对应数字为"1,4,18,19"密钥长度为4;c="eeltt ……r")其中c1=m1 + k1 mod 26 = 4 (e),c5=m5+k1 mod 26=19(t),c12=m12 +k4 mod 26 = 17 (r)。
基本要求:(1)实现对26个字母(不区分大小写)的任意组合进行加密和解密;
(2)编程实现时注意数据结构的选取,演示时要求讲出程序原理;
提高要求:(1)能做出好的图形化界面,便于人机交互;
(2)能够改善运行速度,节省存储空间。设计提示:关键在于明文字母和密文字母之间的转换方法要正确。
特别强调,要C或C++的源代码,谢谢

#include <stdio.h>
#include <iostream>
#include <string>
using namespace std;

void encrypt(char *m, char *k, char *c) //加密算法
{
int i = 0,j=0;
while(m[i] != '\0')
{
if(m[i] >= 'a' && m[i] <= 'z')
{
c[i] = (m[i] - 'a' + k[i%4] - 'a') % 26 + 'a';
i++;

}
else
{
c[i] = (m[i] - 'A' + k[i%4] - 'A') % 26 + 'A';
i++;

}
}
c[i] = '\0';

}

void decrypt(char *m, char *k, char *c) //解密算法
{
int i = 0,j=0;
while(c[i] != '\0')
{
if(c[i] >= 'a' && c[i] <= 'z')
{
m[i] = (c[i] - k[i%4] + 26) % 26 + 'a'; //注意此处
i++;

}

}
m[i] = '\0';

}

void main()
{