C语言 密码学:在两个阵列中;每一列如何在加密由用户创建的密码密钥时保护/知道另一列的相同位置/方位?

qq24tv8q  于 2023-01-29  发布在  其他
关注(0)|答案(1)|浏览(103)

我正在做一些密码学的基础练习;在一个练习中,我想创建两个数组,第一个数组包含从a到z的字母表,第二个数组给予用户选择自己的键字母表,我发现的问题是,例如,当我创建以下字母表时:波伊特雷扎姆山
所以,我要求用户组成一个句子。我的目标是当用户组成一个句子时,字母应该转换成他已经组成的关键字母表。例如:形成的句子:abyz根据您的密钥字母表加密的短语是:poxw我的问题是当我输入一个句子;变换总是从密钥字母表的第一个字母开始:“poi..."。也就是说,关键字母表中的字母并不完全占据原始字母表的位置。下面是我的代码:

#include<stdio.h>
#include<string.h>
void main() {
    char T[26]={'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'};
    char T1[26]={};
    int i;
    printf("We have the alphabet:\n");
    puts(T);
    printf("Enter your key alphabet:");
    gets(T1);
    printf("Your alphabet key is: ");
    puts(T1);
    printf("Form a phrase: ");
    gets(T);
    for(i=0;i<strlen(T);i++){
        T[i]=T1[i];
    }
    printf("The encrypted phrase according to your key alphabet is: ");
    puts(T);
}
z9smfwbn

z9smfwbn1#

伙计们,我经过长时间的研究找到了答案!所以我添加了另一个数组'userinput[]'和一个变量j。当我在'userinput'[]'中构造短语时,我使用了条件if so,而这个条件等于'alphabet[]',字母取值为'cipherkey[]',同时保护列的位置。我还用'if'条件向i添加了'for'函数。然后用'休息。
我的最终代码(我试图写一个干净的代码):

#include<stdio.h>
#include<string.h>
void main() {
    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' }; 
    char cipherKey[27];  
    char userInput[27];
    printf("We have the alphabet :\n");     
    puts(alphabet); 
    printf("Enter your key alphabet: ");
    gets(cipherKey);
    printf("Your key alphabet is: ");
    printf(cipherKey);
    printf("\nForm a phrase: ");
    gets(userInput);
    int i; 
    int j; 
    for(j=0;j<strlen(userInput);j++){
        for(i=0;i<strlen(alphabet);i++){
            if(alphabet[i]==userInput[j]){
                userInput[j]=cipherKey[i];
                break;  
            }
        }
    }
    printf("The encrypted phrase according to your key alphabet is: ");
    puts(userInput);
}

相关问题