Это простая реализация шифра Цезаря в C.
Я беру булавку, делаю из нее ключ, беру сообщение, сдвигаю значение ASCII относительно ключа и выводю шестнадцатеричное значение каждый символ в шестнадцатеричном формате.
При использовании (как мне показалось) любого ключа для некоторых (не всех) сообщений при декодировании печатается дополнительный символ.
Появляется странный символ:
Сообщение: «hexa !
»
Пин: 454545
& Ключ: 23
Зашифрованный текст: (в шестнадцатеричном формате) «51 4e 61 4a 9 a fffffff3 4e -6f
» (-6f просто используется для завершения ввода)
Текст, предоставляемый при декодировании:
hexa !
e
Другие ключи генерируют другие странные символы, например, «+
». Странный символ всегда появляется на следующей строке.
Весь код составляет ~ 100 строк, поэтому я не буду вставлять его сюда, но он доступен на GitHub . Не используйте windows .exe в этом репо, это более старая версия, я пытаюсь исправить эту проблему перед выпуском этой версии.
Код, в котором, вероятно, возникает проблема, является Функции encrypt () и decrypt ():
void encrypt() {
char msg[3001], ch;
int i,key, en[3001], count = 0;
printf("\n");
key = pin();
getchar();
printf("\nType Message - \n\n");
fgets(msg,sizeof(msg),stdin);
for (i=0; msg[i] != '\0'; i++) {
ch=msg[i];
int d = (ch - key);
en[i] = d;
count++;
}
printf("\nEncrypted message -\n\n");
for (i=0; i <= count; i++)
printf("%x ", en[i]);
printf("-6f");
}
void decrypt() {
char msg[3001], ch;
int i,key, en[3001],d;
printf("\n");
key = pin();
printf("\nEnter encrypted message -\n\n");
getchar();
for (i=0; i <= 3001; i++) {
scanf("%x",&d);
if (d == -111) {
msg[i] = '\0';
break;
} else {
ch = d + key;
msg[i] = ch;
}
}
printf("\nDecrypted message -\n\n");
puts(msg);
}