Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [C++]Шиф Цезаря,необходимо побитово инвертиро


Автор: dimakiew 25.4.2010, 16:27
Здравствуте ув. программеры, нужна помощь,
есть шифр Цезаря на С++, но необходимо побайтово инвертировать уже переставленное слово и обратно, у меня получилось как просто инвертировать слово после обработки шифром, и обратно, а как это сделать побитово, недоганяю.
Плиз хелпп.

Код

#include <iostream>
#include <fstream>
#include <string>
#include <stdio.h>
using namespace std;
 
int main()
{        setlocale(0,"RUS");
        char buff1[100] = {0};
        char buff2[100] = {0};
        int key = 0;

 
        cout<<"Введите сообщение,которое будет закодированно"<<endl;
                    
        cin>>buff1;
        cout<<"Введите ключ"<<endl;
        cin>>key;
 
        for (int i = 0; i < strlen(buff1); i++)
                buff1[i] += key;
        cout<<"Кодированное сообщение\n"<<buff1<<endl;
        
                gets(buff2);
        for (int i=0; i<strlen(buff1); i++)
            {
                buff2[i]=buff1[strlen(buff1)-i-1];
            }
        buff1[strlen(buff2)] = 0;

        cout<<"Инвертированное сообщение\n"<<buff2;
        

                gets(buff1);
        for (int i=0; i<strlen(buff2); i++)
            {
                buff1[i]=buff2[strlen(buff2)-i-1];
            }
        buff2[strlen(buff1)] = 0;
        
        
        cout<<"Декодированное сообщение"<<endl;
        for(int i = 0;i < strlen(buff1); i++)
                buff1[i] -= key;
        cout<<buff1<<endl;
 
       system("pause");
        return 0;
}

 smile 

Автор: ToTToRo 26.4.2010, 05:37
dimakiew, это у тебя не код Цезаря, а что-то другое. Код Цезаря http://ru.wikipedia.org/wiki/%D0%A8%D0%B8%D1%84%D1%80_%D0%A6%D0%B5%D0%B7%D0%B0%D1%80%D1%8F.

Автор: dimakiew 26.4.2010, 13:11
Цитата(ToTToRo @ 26.4.2010,  05:37)
dimakiew, это у тебя не код Цезаря, а что-то другое. Код Цезаря http://ru.wikipedia.org/wiki/%D0%A8%D0%B8%D1%84%D1%80_%D0%A6%D0%B5%D0%B7%D0%B0%D1%80%D1%8F.

Самый что ни есть шифр Цезаря, есть вводимое слово, есть ключ(на сколько символов сдвинуть по алфавиту). Смысл задания не только переставить буквы шифром но и инвертировать побитово. Есть инвертирование "сдвинутого"с помощью ключа слова, а вот как КАК ИНВЕРТИРОВАТЬ ПОБИТОВО, А НЕ ПОСИМВОЛЬНО ПРОШУ ПОМОЩИ.

Автор: dimakiew 27.4.2010, 01:06
Да, если хочешь что бы получилось, лучше сделай сам.
Вот готовый код, кому нужно, пользуйтесь. smile 

Код

#include <iostream>
#include <fstream>
#include <string>
#include <stdio.h>
using namespace std;
 
int main()
{        setlocale(0,"RUS");
        char buff1[100] = {0};
        int key = 0;

 
        cout<<"Введите сообщение,которое будет закодированно"<<endl;
                    
        cin>>buff1;
        cout<<"Введите ключ"<<endl;
        cin>>key;

        int realLength = strlen(buff1);
 
        for (int i = 0; i < realLength; i++)
                buff1[i] += key;
        cout<<"Гаммированное сообщение\n"<<buff1<<endl;
            
                for (int i=0; i<realLength; i++)
                buff1[i] ^= 0xff;
        cout<<"Кодированное сообщение (инвертированное)\n"<<buff1<<endl;
        
        for (int i=0; i<realLength; i++)
                buff1[i] ^= 0xff;
        cout<<"Обратно инвертированное сообщение\n"<<buff1<<endl;
        
        for(int i = 0;i < realLength; i++)
                buff1[i] -= key;
        cout <<"Декодированное сообщение\n" <<buff1<<endl;
 
       system("pause");
        return 0;
}

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)