Шифр — система преобразования текста с секретом (ключом) для обеспечения секретности передаваемой информации.
В криптографии шифр — это алгоритм выполнения шифрования или дешифрования — ряд четко определенных шагов, которым можно следовать как процедуре. Альтернативный, менее распространенный термин — шифрование. Шифровать или кодировать означает преобразовывать информацию в шифр или код. В просторечии «шифр» является синонимом «кода», поскольку они оба представляют собой набор шагов, которые шифруют сообщение; однако в криптографии, особенно в классической криптографии, эти понятия различаются.
Коды обычно заменяют на выходе строки символов разной длины, тогда как шифры обычно заменяют то же количество символов, что и на входе. Существуют исключения, и некоторые системы шифрования могут использовать немного больше или меньше символов при выводе по сравнению с числом, которое было введено.
Коды работают путем замены в соответствии с большой кодовой книгой, которая связывает случайную строку символов или чисел со словом или фразой. Например, «UQJHSE» может быть кодом «Перейти к следующим координатам». При использовании шифра исходная информация называется открытым текстом, а зашифрованная форма — зашифрованным текстом. Зашифрованное сообщение содержит всю информацию открытого текста, но не в формате, читаемом человеком или компьютером без надлежащего механизма для его расшифровки.
Работа шифра обычно зависит от части вспомогательной информации, называемой ключом (или, на традиционном языке АНБ, криптопеременной). Процедура шифрования варьируется в зависимости от ключа. Перед использованием шифра для шифрования сообщения необходимо выбрать ключ. Без знания ключа будет чрезвычайно сложно, если вообще возможно, расшифровать полученный зашифрованный текст в читаемый открытый текст.
Большинство современных шифров можно разделить на несколько категорий.
По тому, работают ли они с блоками символов обычно фиксированного размера (блочные шифры) или с непрерывным потоком символов (потоковые шифры).
По тому, используется ли один и тот же ключ и для шифрования, и для дешифрования ( алгоритмы с симметричным ключом ), или для каждого из них используется разный ключ ( алгоритмы с асимметричным ключом). Если алгоритм симметричен, ключ должен быть известен получателю и отправителю и никому другому. Если алгоритм является асимметричным, ключ шифрования отличается от ключа дешифрования, но тесно связан с ним. Если один ключ нельзя вывести из другого, алгоритм асимметричного ключа имеет свойство открытого/закрытого ключа, и один из ключей может быть сделан открытым без потери конфиденциальности.