gpt4 book ai didi

c - 维吉尼亚密码C语言

转载 作者:行者123 更新时间:2023-11-30 15:03:01 30 4
gpt4 key购买 nike

我正在尝试用 C 语言制作维吉尼亚密码。输入只能是字母字符 (a->z)。

目前我的问题是输出仅输出 4 个字符并输出字母表之外的奇怪字符。我创建了 if 语句来防止这种情况发生,但它们似乎不起作用。有什么建议吗?

#include <stdio.h>


int main(){
int i=0;
//Vigenere Cipher-- keyword is "apple"
//a = 1 value shift
//p = 16 value shift
//p = 16 value shift
//l = 17 value shift
//e = 5 value shift
//cleaning out string array
char guy[100];

printf("Enter the plain text: ");
fgets(guy, 100, stdin);//takes user's input

while (guy[i] != '\0'){ //while loop that runs until it reaches the end of the string

if ((i%5==0) || i==0){ //checks to see which character it is in the string, for instance the numbers 0,5,10,15,20 should all be added by 1
guy[i] = guy[i]+1;
if (guy[i]>'z' && guy[i]<'A'){
guy[i]-25;
}
if (guy[i]>'Z' && guy[i]>'A'){
guy[i]-25;
}
}

if (((i-1)%5==0) || i==1){ //all numbers that are second in the key word 'apple', such as 1,6,11,16
guy[i]=guy[i]+16;
if (guy[i]>'z' && guy[i]<'A'){
guy[i]-25;
}
if (guy[i]>'Z' && guy[i]>'A'){
guy[i]-25;
}
}
if (((i-2)%5==0) || i==2){// all numbers that are third to the key word 'apple' , such as 2,7,12,17,22
guy[i]=guy[i]+16;
if (guy[i]>'z'&& guy[i]<'A'){
guy[i]-25;
}
if (guy[i]>'Z'&& guy[i]>'A'){
guy[i]-25;
}
}
if(((i-3)%5==0) || i==3){// all numbers that are fourth to the key word 'apple', such as 3,8,13,18
guy[i]=guy[i]+17;
if (guy[i]>'z'&&guy[i]<'A'){//takes care of z
guy[i]-25;
}
if (guy[i]>'Z' && guy[i]>'A'){//takes care of Z
guy[i]-25;
}
}
if(((i-4)%5==0) || i==4){// all numbers that are fifth in the key word 'apple', such as 4,9,14,19
guy[i]=guy[i]+5;
if (guy[i]>'z'&& guy[i]<'A'){
guy[i]-25;
}
if (guy[i]>'Z' && guy[i]>'A'){
guy[i]-25;
}
}
else {
i++;
}
}
printf("Encrypted text is: %s\n",guy);
}

最佳答案

有一个函数 encrypt_char() 可以为您进行加密。

void encrypt_char(char *character, unsigned int offset)
{
if('a' <= *character && 'z' >= *character)
{
*character = ((*character + offset - 'a') % 26) + 'a';
}
else if('A' <= *character && 'Z' >= *character)
{
*character = ((*character + offset - 'A') % 26) + 'A';
}
}

用你的偏移值调用它。

if (i%5==0){
encrypt_char(&(guy[i]), 1);
} else if ((i-1)%5==0){
encrypt_char(&(guy[i]), 16);
} else...

关于c - 维吉尼亚密码C语言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40880260/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com