Шифрование с помощью сдвига


Шифрование с помощью сдвига - один из вариантов замены открытого
алфавита на закрытый. Главный недостаток таких шифров в том, что
буквосочетания имеют некоторую определенную вероятность и если в
шифре встречается к примеру буквосочетание 'ГЦГ' с известной
вероятностью его можно трактовать как буквосочетание 'ТУТ' или 'КАК'.
А разгадать остальное - вопрос одной минуты.

/*///////////////////////////////////////////////////////////////

 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;
}