C 编程 - 尝试制作 Vigenere 加密/解密程序 [关闭]
Posted
技术标签:
【中文标题】C 编程 - 尝试制作 Vigenere 加密/解密程序 [关闭]【英文标题】:C programming - Trying to make Vigenere encryption/decryption program [closed] 【发布时间】:2014-05-22 23:38:05 【问题描述】:你能看一下这段代码吗?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char encrypt(char *abc, int *key,char text, int counter)
int i;
int encryptedletter;
for(i=0;i<=25;i++)
if(text==abc[i])
encryptedletter = (i + key[counter])%26 ;
return abc[encryptedletter];
char decrypt(char *abc, int *key,char text, int counter)
int i;
int decryptedletter;
for(i=0;i<=25;i++)
if(text==abc[i])
decryptedletter = (i-key[counter])%26 ;
return abc[decryptedletter];
int main(void)
char text[100];
char encryped[100];
char decrypted[100];
char key[20];
int i,z,q,keylength,counter=0;
char abc[27]= "abcdefghijklmnopqrstuvwxyz"; //ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 .";
int keyint[70];
printf("Give Text: ");
gets(text);
printf("Give Password: ");
gets(key);
keylength = strlen(key);
for(z=0;z<strlen(key);z++)
for(i=0;i<=25;i++)
if(key[z]==abc[i]) keyint[z] = i;
//~~~~~~~~~~~~~~~~~~~~~~~~~~ENCRYPTION~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
for(i=0;i<strlen(text);i++)
if(counter>=keylength) counter=0;
encryped[i] = encrypt(abc,keyint,text[i],counter);
counter++;
encryped[strlen(text)]='\0';
printf("\nEncrypted text: %s\n", encryped);
//~~~~~~~~~~~~~~~~~~~~~~~~~~DECRYPTION~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
counter =0;
for(q=0;q<=strlen(text);q++)
if(counter>=keylength) counter=0;
decrypted[q] = decrypt(abc,keyint,encryped[q],counter);
counter++;
printf("%c", decrypted[q]);
return 0;
我正在尝试制作一个基于 Vigenere 的加密/解密程序。
我认为它工作正常.. 但是当我的 abc 数组上的文本或密码字母高于“T”(不确定)时,我会得到错误的解密文本。
【问题讨论】:
您可以在 codereview.stackexchange.com 上获得帮助 【参考方案1】:您需要考虑在encrypt()
和decrypt()
中从未输入if(text==abc[i])
的情况。在这种情况下,您写入encrypted
/decrypted
的返回值是多少?
您可能希望 return text
未加密,以便保留空格、标点符号等,从而确保加密和解密消息的长度为 strlen(text)
最后,decryptedletter = ((i-key[*counter])%26)
可以变为负数,因此您不能将其用作abc[decryptedletter]
的索引。在这种情况下,您需要“将其包裹起来”,例如由
if(decryptedletter<0) decryptedletter += 26;
【讨论】:
以上是关于C 编程 - 尝试制作 Vigenere 加密/解密程序 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章