gpt4 book ai didi

c - 实现使用维吉尼亚密码 C 加密消息的程序

转载 作者:行者123 更新时间:2023-11-30 19:35:25 25 4
gpt4 key购买 nike

我尝试编写一个程序,该程序使用维吉尼亚密码。每 3 个字母都是错误的。有人可以给我提示吗?谢谢您的帮助。

#include <stdio.h>
#include <cs50.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>


int main(int argc, string argv[])
{

int n = 0;
int j = 0;
int p;
int l;
int x = 0;


if(argc != 2)
{
printf("missing command-line argument\n");
return 1;
} else
{
printf("plaintext: ");
}

string text = get_string();
string key = (argv[1]);

printf("ciphertext: ");


for (j = 0, x = 0, n = strlen(text); j < n; j++)
{

p = (((text[j] - 65) + ((key[x] - 65) % strlen(key))) % 26) + 65;
l = (((text[j] - 97) + ((key[x] - 97) % strlen(key))) % 26) + 97;

if(isalpha(text[j]))
{
if( isupper (text[j]))
{
printf("%c", p);
x++;
}
if( islower (text[j]))
{
printf("%c", l);
x++;
}
}else
{
printf("%c", text[j]);
}
if(x == strlen(key))
{
x = 0;
}
}
printf("\n");
return 0;
}

我无法判断 put int p、int l 是否错误或者是否是其他问题。

hear 是一个输入/输出示例

:) 使用“a”作为关键字将“a”加密为“a”

:( 使用“baz”作为关键字将“barfoo”加密为“caqgon” \预期输出,但不是“密文:casgop\n”

:( 使用“BaZ”作为关键字将“BaRFoo”加密为“CaQGon” \预期输出,但不是“密文:CaSGoo\n”

:( 使用“BAZ”作为关键字将“BARFOO”加密为“CAQGON” \预期输出,但不是“密文:CASGOP\n”

:( 使用“baz”作为关键字将“world!$?”加密为“xoqmd!$?” \预期输出,但不是“密文:xosmd!$?\n”

:( 使用“baz”作为关键字将“world, say hello!”加密为“xoqmd, rby gflkp!” \预期输出,但不是“密文:xosmd,tby iflmp!\n”

最佳答案

查看维基百科对密码的描述,分解数学,你有 17 (R) + 25 (Z) mod 26,即 16 (Q)...所以基本上用 Z 加密任何字母都会得到R 之前的字母是 Q。

但是你的代码没有做这个数学运算 - 它在错误的位置有一个虚假的“% strlen(key)”,这就是为什么你认为它应该是一个 S。你希望它在 key 的索引中,比如因此,您可以放弃变量 x

p = (((text[j] - 'A') + (key[j % strlen(key)] - 'A')) % 26) + 'A';
l = (((text[j] - 'a') + (key[j % strlen(key)] - 'a')) % 26) + 'a';

此外,您会注意到我用字符替换了 65 和 97,因为这使代码更具可读性。

关于c - 实现使用维吉尼亚密码 C 加密消息的程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42693134/

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