Найти в Дзене
D21nk Master

Твоё первое шифрование

В предыдущей статье мы узнали что такое строка в си,предлагаю вам применить уже эти знания на практике.Для практики возьмём один из самых простых шифров,а именно шифр Цезаря,да того самого Цезаря.

Вся работа шифра заключалась в сдвиге каждой буквы на определённую позицию.Так при сдвиге на 2 символа буква А становилась В и так далее.Мы же уже с вами знаем,что каждый символ по своей сути число,а это значит что символом мы можем манипулировать как числом.Идеально для нашего шифра.

Хороший программист,как инженер-сперва должен набросать чертёж или план действий:

1)Программа должна не только шифровать,но и расшифровывать строки

2)Нужен индивидуальный ключ

3)Принимает строку

4)Как и в любой хорошей программе должна присутствовать обработка ввода

Поговорим об последнем,об обработчике ввода.Во многих языках программирования это просто логическое условие,но мы на этом не остановимся.В довесок мы закроем одну возможность эксплойта в нашей программе.

Допустим мы взяли массив символов в 256 байт,а если юзер введёт 257 байт? Последний байт попадёт в неизвестную область,что может "убить" какую-нибудь программу,а так же вызвать так называемую атаку переполнения буфера.

Исправить это в функции scanf можно довольно легко с помощью форматированного ввода:

char buf[256];
scanf("%5s",buf);

То есть: в строке обязателен процент,цисло принимаемых символов и сам модификатор.В данном примере мы оставили для массива один байт для терминатора.

Перед дальнейшими действиями стоит рассказать ещё об одной вещи,которая может поставить в тупик новичков.

До этого момента все программы с функцией main были типом void,то есть ничего не возвращающим,это не совсем так.Любая функция должна вызвать return,перед выходом,вместо нас "return" в код ставил компилятор,но это не мешает нам этим пользоваться.

Скажем пользователь сделал что-то неправильно и мы хотели бы завершить программу,сделать это можно следующим образом:

if(a==10)
{
printf("Wrong input!\n");
return;//пустой тип ничего не может вернуть
}

Если вы ранее уже пробовали писать программы с кириллицей-то наверняка заметили,что консоль выводит какой-то непонятный текст.Всё потому что консоль windows работает на кодировке win-1251.

В следующем уроке я покажу как это исправить.

На этом я пока закончу,предлагаю вам попробовать реализовать это самое шифрование по "чертежу" выше самостоятельно.Я верю в вас,желаю удачи!