Страница 1 из 2
Задача на шифровку в С++
Добавлено: 18 май 2008, 18:11
void_main
ПОжалуйста сделайте или объясните как делать! Мне нужно сделать шифровку и дешифровку методом битовых манипуляций. В С++....просто я уже в отчаянии

Re: Задача на шифровку в С++
Добавлено: 19 май 2008, 11:40
Хыиуду
Самый простой случай - сделать сложение по модулю 2 с какой-то константой. Расшифровка - опять сложение по модулю 2. В Паскале это XOR. В Си - не помню как, возможно ^
Re: Задача на шифровку в С++
Добавлено: 19 май 2008, 16:09
void_main
Если честно то я не понял как

...объясни пожалуйста поподробнее или на примере
Re: Задача на шифровку в С++
Добавлено: 19 май 2008, 16:25
BAHTY3
Вот 2 функции:
Код: Выделить всё
int Bin2Dec(int N[8])//перевод массива битов в число
{
int i=0;
int NumDec=0;
for(i=7;i>-1;i--){
f(N[i]==1){
NumDec=NumDec+pow(2,7-i);
}
}
return NumDec;
}
void Dec2Bin(int NumDec)//перевод числа в строку бит
{
int i=0;
for(int y=0;y<8;y++){
NumBin[y]=0;
}
i=7;
while(NumDec>0){
NumBin[i]=NumDec%2;
NumDec=NumDec/2;
i--;
}
}
и верти биты как тебе только нравиться

соответственно тебе нужно будет либо заводить глобальные NumBin[8] и NumDec или слегка переделать на возвращение значений функциями...
Хыиуду писал(а):Самый простой случай - сделать сложение по модулю 2 с какой-то константой. Расшифровка - опять сложение по модулю 2. В Паскале это XOR. В Си - не помню как, возможно ^
Так и есть в С,С++ это ^
пример?
Код: Выделить всё
#include<iostream.h>
int main()
{
char temp='s';//будем шифровать s
int hesh;
cout << temp << endl;
hesh=temp;
hesh=hesh^2;
temp=hesh;
cout << temp << endl;
return 0;
}
помоему, предельно понятно

Re: Задача на шифровку в С++
Добавлено: 19 май 2008, 20:11
void_main
эххх...ничего не понял и даже эти проги не запустил

или я тупой или...я тупой. Может сделаете программу полностью пожалуйста, понимаю что я такой не один и что вам может быть не охото тратить своё время, но всё таки? Век не забуду

Re: Задача на шифровку в С++
Добавлено: 20 май 2008, 00:13
BAHTY3
Простейший способ, но он наврятли удовлетварит кокого ни будь препода в универе...
Код: Выделить всё
#include<iostream.h>
int main()
{
FILE* in;
FILE* out;
char temp;
int hesh;
cout << "c|d\n--> ";
cin >> temp;//вводим 'c' для кодировки файла или 'd' для его дешифрации
if(temp=='c'){
if((in=fopen("in.txt","r"))==NULL){//обрати внимание, что файлеки текстовые и имеют свои определенные имена ;)
cerr << "No input file!\n";
exit(1);
}
out=fopen("code.txt","w");
while((temp=getc(in))!=EOF){//шифруем при помощи XoR (почитай в инете что это ;) ), да можно сделать красиво и в одну строку, но мне лень =)
hesh=temp;
hesh=hesh^2;
temp=hesh;
fprintf(out,"%c",temp);
}
fcloseall();
temp='\0';
}
if(temp=='d'){
if((in=fopen("code.txt","r"))==NULL){
cerr << "No input file!\n";
exit(1);
}
out=fopen("out.txt","w");
while((temp=getc(in))!=EOF){
hesh=temp;
hesh=hesh^2;
temp=hesh;
fprintf(out,"%c",temp);
}
fcloseall();
temp='\0';
}
return 0;
}
Если интересно, то могу скинуть свои старые кодеры, которые именно "манипулируют битами", в частности что ни будь в духе шифрации на основе регистра сдвигов или реализации DES... Но всегда куда приятней сделать своими руками

Re: Задача на шифровку в С++
Добавлено: 20 май 2008, 04:57
void_main
Спасибо большое, только объясни как ей пользоваться...я ввожу "с" и нечего не происходит. Кстати насчёт препода в универе что ему не понравится?

Re: Задача на шифровку в С++
Добавлено: 20 май 2008, 10:56
MOTOCoder
Интересно, это я чего-то не понял, или здесь даже пароль не используется?
Re: Задача на шифровку в С++
Добавлено: 20 май 2008, 11:15
Хыиуду
Ну, Юлий Цезарь же со своей шифровкой имени себя тоже без пароля обходился, одним алгоритмом

Re: Задача на шифровку в С++
Добавлено: 20 май 2008, 17:22
BAHTY3
MOTOCoder, ну не просили же шифрацию паролем... просто ранее было предложено просто ксорить

ну сам понимаешь, что выкладывать нормальный шифратор как то нелепо
Хыиуду, он вообще был реальной крутышкой
void_main, если напрячься и взглянуть на код, то можно увидеть следущее.. при выборе 'c' программа "шифрует" содержимое файлика по имени "in.txt" и пишет результат в "code.txt", а при выборе 'd' она читает "code.txt" и пишет результат в "out.txt"
не понравиться абсолютно пофигистичное отношение к заданию

потому как ну ооочень тупо написано.