Шифрование с помощью сдвига - один из вариантов замены открытого
алфавита на закрытый. Главный недостаток таких шифров в том, что
буквосочетания имеют некоторую определенную вероятность и если в
шифре встречается к примеру буквосочетание 'ГЦГ' с известной
вероятностью его можно трактовать как буквосочетание 'ТУТ' или 'КАК'.
А разгадать остальное - вопрос одной минуты.
/*///////////////////////////////////////////////////////////////
SHIFT, GNU C++, 2011-01-15
Artix, master@7masterov.ru, icq:53666599, skype:artixmaster
* Error in code? Nothing is perfect!
* Free source for free Linux, use it for free!
* Please, do not remove this comment!
///////////////////////////////////////////////////////////////*/
#include <stdio.h>
#include <string.h>
int getCodeOf(char sym)
{
return sym & 0xFF;
}
char getCharOf(int code)
{
return code & 0xFF;
}
// Необязательная фукнция форматирования вывода
// Отображает только "нормальные" символы A-Z
// Другие - отображает как звездочку '*'
char viewChar(char c)
{
if (c==' ' || (c>='A' && c<='Z')) return c;
return '*';
}
int main()
{
char str[]="HELLO AND WELCOME FROM MOSCOW RUSSIA\0";
char sec[]="-----------------------------------------------\0";
int LEN = strlen(str);
// Ключ шифрования = значение сдвига
char pwd=8;
// encode
for(int i=0;i<LEN;i++)
{
char n = getCharOf( (getCodeOf(str[i])+pwd) % 256 );
printf("%c",viewChar(n));
sec[i] = n;
}
printf("\n");
// decode
for(int i=0;i<LEN;i++)
{
char n = getCharOf( (getCodeOf(sec[i])+256-pwd) % 256 );
printf("%c",viewChar(n));
}
printf("\n");
return 0;
}
Справочник алгоритмов v0.05 © 2007-2025 Igor Salnikov aka SunDoctor