Шифрование путем отображения алфавита


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


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

 ABC, GNU C++, 2011-01-01
 
 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>

// Исходный алфавит
char alpha[] = " ABCDEFGHIJKLMNOPQRSTUVWXYZ\n";
// Алфавит шифра
char  beta[] = " KARBDXEGHUIJZLMFNYOPQSCTVW\n";
 
int getCodeOf(char *abc, char sym)
{
    char *p=abc;
    int i=0;
    while(*p) {
        if (*p==sym) return i;
        p=p+1;
        i++;
    }
    return 0;
}
 
char getCharOf(char *abc, int code)
{
    return *(abc+code);
}
 
int main()
{
    char str[]="HELLO AND WELCOME FROM MOSCOW            RUSSIA\0";
    char sec[]="-----------------------------------------------\0";
    int LEN = strlen(str);
 
    // encode
    for(int i=0;i<LEN;i++)
    {
        char n = getCharOf( beta, getCodeOf(alpha,str[i]) );
        printf("%c",n);
        sec[i] = n;
    }
    printf("\n");
 
    // decode
    for(int i=0;i<LEN;i++)
    {
        char n = getCharOf( alpha, getCodeOf(beta,sec[i]) );
        printf("%c",n);
    }
    printf("\n");
    return 0;
}