#include<stdio.h>
#include<string.h>
#include<ctype.h>
int main()
{
char cleartxt[256];
printf("what do you want to cipher? (lower cases only)\n");
fgets(cleartxt, sizeof(cleartxt), stdin);
int len = strlen(cleartxt);
for (int i = 0; i < len; i++) //converting uppercases in lowercases
{
if (isupper(cleartxt[i]))
{
cleartxt[i] = (tolower(cleartxt[i]));
}
}
char scrambled_alphabet[256];
printf("put here your scrambled alphabet\n");
fgets(scrambled_alphabet, sizeof(scrambled_alphabet), stdin);
int alph_len = strlen(scrambled_alphabet);
char alphabet[27] = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
for (int i = 0; i <= (len - 1); i++) //algorhmithm for the cipher
{
for (int j = 0; j <= (alph_len - 1); j++)
{ if (cleartxt[i] == alphabet[j])
{
cleartxt[i] = scrambled_alphabet[j];
}
}
}
printf("%s", cleartxt);
return 0;
}
此代码获取一个字母表,在该字母表中,您将一个没有重复字母的词放在字母表的开头,然后将其余字母表中的字母重复(例如zebracdfghijklmnopqstuvwxy),然后通过交换字母的字母来加密一个单词字母到同一位置的混乱字母的字母(例如,汽车变成bzp)。
我为密码编写了此代码,但是它不能很好地工作,字母“ a”变成了随机字母,根据我在加扰的字母上使用的单词,同样的事情会在明文的第一个字母处发生
答案 0 :(得分:1)
将此行添加到您的内部循环中:
printf("i=%d %c to j=%d %c\n", i, cleartxt[i], j, scrambled_alphabet[j]);
恰好在分配cleartxt[i] = scrambled_alphabet[j];
之前。
它打印出以下内容:
i=0 c to j=2 b
i=1 a to j=0 z
i=1 z to j=25 y
i=2 r to j=17 p
byp
请注意,i=1
有两个打印件。完成分配后,您需要停止内部循环。