2 qq 24670555 qq_24670555 于 2016.09.23 21:48 提问

维吉尼亚密码的C语言bug

这是我刚写的维吉尼亚密码的算法,要求输入明文和密钥,输出密文和解密后的明文。
然而输出结果相差甚远,求好心的大牛有空查看一下我写的出现了什么问题。
源代码:
//实现维吉尼亚密码的算法

include

include

char plaintext[100],key[20],ciphertext[100],decry_plaintext[100];
void encryption();//加密函数
void decryption();//解密函数

void encryption()
{
int length_plain,length_cipher,i = 0,j = 0;
length_plain = strlen(plaintext);//明文长度
length_cipher = strlen(ciphertext);//密文长度
if(length_plain > length_cipher)//明文长度大于密钥长度
{
for(i = 0;i < length_plain;i++)
{
ciphertext[i] = (plaintext[i] + key[j]) % 26 + 97 - 32;//小写字母转化为大写字母
printf("%c",ciphertext[i]);
j++;
if(j >= length_cipher){
j = 0;
}
}
}
else
{
for(i = 0;i < length_plain;i++)
{
ciphertext[i] = (plaintext[i] + key[j]) % 26 + 97 - 32;
printf("%c",ciphertext[i]);
j++;
}
}
printf("\n");
}

void decryption()
{
int length_plain,length_cipher,i = 0,j = 0;
length_plain = strlen(plaintext);
length_cipher = strlen(ciphertext);
if(length_plain > length_cipher)
{
for(i = 0;i < length_plain;i++)
{
decry_plaintext[i] = (ciphertext[i] - key[j]) % 26 + 97;
printf("%c",decry_plaintext[i]);
j++;
if(j >= length_plain){
j = 0;
}
}
}
else
{
for(i = 0;i < length_cipher;i++)
{
decry_plaintext[i] = (ciphertext[i] - key[j]) % 26 + 97;
printf("%c",decry_plaintext[i]);
j++;
}
}
printf("\n");
}

int main()
{
printf("Please input the plaintext:\n");
gets(plaintext);//输入明文
printf("Please input the key:\n");
gets(key);//输入密钥
puts(ciphertext);
encryption();
printf("Please output the decry_plaintext:\n");
decryption();
puts(decry_plaintext);
return 0;
}

1个回答

caozhy
caozhy   Ds   Rxr 2016.09.23 23:43
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
维吉尼亚密码的加解密C语言实现
这是一个C语言实现的维吉尼亚密码的命令行程序,可以实现加密解密
维吉尼亚密码(C语言实现)
、实现维吉尼亚密码,用键盘接收明文和密钥,屏幕打印密文和解密后的明文。(必做) 2、实现单表替换密码,用键盘接收明文和密钥,屏幕打印替换表和密文。(选做) 3(选作)、在实现1的基础上,用维吉尼亚密码实现控制台对英文文本文件(注意明文和密文都以文件形式存在)的加解密 形式: cipher -e/-d key inputfile outputfile 说明:对于加密来说,输入文件名就是明文文件,对于解密来说,输入文件名就是密文文件,非明密文字符保留 控制台编程: int main(int argc, char *argv[ ]) 4、在实现3的基础上,实现控制台对所有文件(中英文文本、符号甚至任意的文件)的加解密,形式如3中规定 注意:文件的存在形式,文件读取方式和控制文件结束
维吉尼亚密码的加密和解密C语言实现
亲测可用。
维吉尼亚密码 C语言
全面实现维吉尼亚密码的所有功能 加密及解密 以及详细的算法描述
维吉尼亚密码加密--解密程序
维吉尼亚密码加密--解密程序,可以帮您验证你写的算法是否正确
维吉尼亚密码的c++程序设计
古典密码体系中最基本的一种密码机制,使用c++设计完成
C语言-数据结构-循环链表实例-维吉尼亚(vigener)密码源代码
1. 背景介绍 维吉利亚密码 维吉尼亚密码引入了“密钥”的概念,即根据密钥来决定用哪一行的密表来进行替换,以此来对抗字频统计。假如以上面第一行代表明文字母,左面第一列代表密钥字母,对如下明文加密: TO BE OR NOT TO BE THAT IS THEQUESTION 当选定RELATIONS作为密钥时,加密过程是:明文一个字母为T,第一个密钥字母为R,因此可以找到在R行中代替T
C语言编写的维吉尼亚密码算法
利用C语言编写的简单的维吉尼亚密码算法,实现了在控制台下键盘输入明文或者密文以及密钥实现加密或者解密
[加密]C#实现维吉尼亚加密与解密(解密前提为已知密匙)
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespac
古典密码之维吉尼亚密码破解思路
维吉尼亚密码破解