gpt4 book ai didi

c - 如何使用本地字母顺序编号而不是 ascii

转载 作者:太空宇宙 更新时间:2023-11-03 23:21:51 25 4
gpt4 key购买 nike

如何在加密期间使用字母顺序而不是 ascii 表编号?比如我想用一次一密加密(text+key)modulo26,好像是取ASCII码。我在 C 语言中尝试了以下内容:

encrypted[i] = (text[i]+key[i])%26 

但是 cmd 向我显示了许多问号而不是密文。这是我的完整代码:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define clear_buffer while(getchar()!='\n');

char* encrypt(char texte[],char cle[]){
char *encrypted;
int i=0;
texte=texte-'a';
cle=cle-'a';
while(texte[i]!='\0' && cle[i]!='\0'){
encrypted[i]='a'+(texte[i]+cle[i])%26;
i++;
}
encrypted[i+1]='\0';
return encrypted;

}
char* decrypt(char encrypted[],char cle[]){
char *decrypted;
int i=0;

while(encrypted[i]!='\0' && cle[i]!='\0'){
decrypted[i]=(encrypted[i]-cle[i])%26;
i++;
}
decrypted[i+1]=0;
return decrypted;

}
int main()
{
char reponse,texte[100],cle[100],encrypted[100];
int i=0;

do{
printf("Voulez vous crypter ou decrypter un texte?(Ecrire C pour crypter et D pour decrypter)\n");
scanf("%c",&reponse);
}while (reponse!='C'&& reponse!='D'&& reponse!='c'&& reponse!='d');//controle pour obliger l'utilisateur à donner c ou d
if(reponse=='C'||reponse=='c'){
clear_buffer;//vider le buffer apres le scanf de la reponse
printf("Donner un texte a crypter\n");
fgets(texte,100,stdin);
while(texte[i]!=0)
i++;
if (i>0 && texte[i-1]!='\n')
clear_buffer;
printf("Donner une cle de meme taille\n");
fgets(cle,100,stdin);
i=0;
while(cle[i]!=0)
i++;
if (i>0 && cle[i-1]!='\n')
clear_buffer;
printf("Le texte crypte est:%s\n",encrypt(texte,cle));

}else{
clear_buffer;//vider le buffer apres le scanf de la reponse
//do{
printf("Donner un texte (deja crypte) à decrypter\n");
fgets(encrypted,100,stdin);
i=0;
while(encrypted[i]!=0)
i++;
if (i>0 && encrypted[i-1]!='\n')
clear_buffer;
printf("Donner la cle (deja utilisee pour crypter\n");
fgets(cle,100,stdin);
i=0;
while(cle[i]!=0)
i++;
if (i>0 && cle[i-1]!='\n')
clear_buffer;
// }while(sizeof encrypted!=sizeof cle);
printf("Le texte decrypte est:%s\n",decrypt(encrypted,cle));
}
system("pause");
return 0;
}

最佳答案

假设您只使用小写字母,您可以减去 ascii 偏移量并将文本和 key 转换为 0-25 之间的值,然后进行加密过程并在末尾添加偏移量。

text = text - 'a';
key = key - 'a';
char encrypt = 'a' + ( text + key ) % 26

而且在您的代码中,您还没有为 2 个字符指针分配内存。

char *encrypted = (char*)malloc(100);

char *decrypted = (char*)malloc(100);

关于c - 如何使用本地字母顺序编号而不是 ascii,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37238539/

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