Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Элементарнейший шифратор, шифрование путем замены букв 
V
    Опции темы
jmp
Дата 20.2.2008, 01:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 13.12.2007

Репутация: нет
Всего: нет



Это снова я smile

Здраствуйте.

Мне потребовалось сделать примерно такое:

Код

cin >> password;
/*перестановка букв в password
типо
a=>U
z=>8
1=>o
*/
ofstream pwd("database.x");
pwd << password <<"\n";
pwd.close();


думаю мысль ясна... (непонятливые читают комент в коде)
пожелания - не выходить за рамки <iostream> <fstream>..а и еще, ненадо меня корить неустоичивостью с позволения сказать алгоритма, шифратор мне нужен для галочки.


Это сообщение отредактировал(а) jmp - 20.2.2008, 12:55
PM MAIL   Вверх
Mayk
Дата 20.2.2008, 06:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

Репутация: 3
Всего: 134



А где вопрос?




--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
new_web
Дата 20.2.2008, 08:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 94
Регистрация: 1.2.2008

Репутация: нет
Всего: нет



Мысль предельно ясна, можно сказать исчерпывающе smile 
В Builder 6 работает: 
Код

#include <iostream>
#include <fstream>
#include <vcl.h>
#pragma hdrstop

//---------------------------------------------------------------------------

#pragma argsused
int main(int argc, char* argv[])
{
  using namespace std;
  char password[250];
  cin.getline(password,250);
  for(int i=0;i<250||password[i]=='\n';i++)
  {
   if(password[i]=='a')password[i]='U';
   if(password[i]=='z')password[i]='8';
   if(password[i]=='1')password[i]='o';
   //и так дальше  вручную расписать
  }
  ofstream pwd("database.x");
  pwd << password <<"\n";
  cout << password<<"\n";
  pwd.close();
  system("PAUSE");
        return 0;
}

Алгоритм типо устойчиввый, database.x делает, только повозиться надо с остальными символами, и тогда эту фразу(password) родная мать не узнает smile 

А дешифратор будет для следующей Галочки smile ?
А как это заавтоматизировать ,создать ключи, это  самому интересно! smile 


PM MAIL   Вверх
Dronchik
Дата 20.2.2008, 12:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Звукач ёмаё
**


Профиль
Группа: Участник
Сообщений: 451
Регистрация: 1.5.2007

Репутация: 1
Всего: 37



jmp, а вы в курсе что формат х используеться для хранения 3д моделей для ДиректХ у майкрософта?


--------------------
Вместо слов делай дело, от которого ты фанатеешь. (с)

PM MAIL WWW ICQ   Вверх
Mayk
Дата 20.2.2008, 12:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

Репутация: 3
Всего: 134



Dronchik, он много где используется. 
Но какая разница?


--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
jmp
Дата 20.2.2008, 12:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 13.12.2007

Репутация: нет
Всего: нет



Ааа спасибо new_web!  smile  

прописал ко всем буквам и цифрам, отлично пашт! ..единственно мне не ясно это зачем в строке

Код

for(int i=0;i<250||password[i]=='\n';i++)


часть 
Код

||password[i]=='\n'


а дешифратор я постараюсь сам, а то без него никак, ведь нужно не только записывать но и читать smile

и еще непонял зачем прагмы, у меня на них МингВ варнинги ставил и говорил Игноред..

Dronchik
Х - это тут для примера, в моей программе использоваться будет другое.


Это сообщение отредактировал(а) jmp - 20.2.2008, 12:57
PM MAIL   Вверх
new_web
Дата 20.2.2008, 14:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 94
Регистрация: 1.2.2008

Репутация: нет
Всего: нет



Цитата(jmp @  20.2.2008,  12:55 Найти цитируемый пост)
..единственно мне не ясно это зачем в строке

Код

for(int i=0;i<250||password[i]=='\n';i++)

часть
Код

password[i]=='\n'


Я прошу прощения, ибо жестоко ошибся - следует понимать не '\n' - непечатаемый символ перевода на новую строку, а нуль символ '\0' - окончание строки 
|| - или. 
Тоесть или мы дошли до максимума 250, или, наш пароль кончился - '\0' - это есть символ окончания строки. Он автоматически добавляется в каждой строке, которая вводится в поток. А если мы програмно создаём строку, то надо записать вот так:
Код

 char pass[]={'p','a','s','\0'};



Цитата(jmp @  20.2.2008,  12:55 Найти цитируемый пост)
и еще непонял зачем прагмы, у меня на них МингВ варнинги ставил и говорил Игноред..


Этот код для Builder  у меня компилировалось чисто. Что такое прагма - это надо спрашивать у многозвёздников smile ...
Суть в самом main. А какой-там компилятор чего компилит, нравится не нравится, это уже дело вкуса самого компилятора...моему нравится smile прагма

А в дешифраторе - главное буковки не попутай. а то Галочка smile  - останется весьма недовольной smile  smile 

Только не понял, о каком формате спор? Если о разширении файла создаваемого, то сойдёт тхт, например, или создать свой какой-нибуть формат. типа  *.xpk - разшифровывается "Хрен простишь какой" формат. его можно блокнотом открыть. полюбоватсья...так даже прикольней, кто додумается искать в файле хрен простишь какого формата, важную, зашифрованную информацию? smile 


Это сообщение отредактировал(а) new_web - 20.2.2008, 14:30
PM MAIL   Вверх
opjox
Дата 20.2.2008, 15:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 90
Регистрация: 17.1.2008

Репутация: 2
Всего: 14



Вариант, предложенный new_web, не понравился:
1) ненужные директивы #pragma и vcl.h 
2) (!!) неверное условие цикла for – его тело будет выполняться все 250 раз вне зависимости от введенной строки
3) все таки стоит проверять на возможность создания файла. 

Поэтому опубликую свой вариант: 
Код

#include <iostream>
#include <fstream>
#include <string>
using namespace std;

int main(int argc, char ** argv)
{
  string pass;
  getline(cin, pass);
  for(int i=0;pass[i];i++) {
    switch(pass[i]) {
      case 'a': pass[i]='U'; break;
      // и так далее:     case '': pass[i]=''; break;
      default: ;
    }
  }
  ofstream f("out.txt");
  if(!f.is_open()) {
    cout << "not create file\n";
    return 1;
  }
  f << pass;
  f.close();
  return 0;
}


P.S. хотя бы я подумал над алгоритмом шифрования больше, но хозяин-барин. 


Это сообщение отредактировал(а) opjox - 20.2.2008, 15:37
PM MAIL ICQ   Вверх
new_web
Дата 21.2.2008, 01:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 94
Регистрация: 1.2.2008

Репутация: нет
Всего: нет



Цитата(opjox @  20.2.2008,  15:37 Найти цитируемый пост)
2) (!!) неверное условие цикла for – его тело будет выполняться все 250 раз вне зависимости от введенной строки


да, опять ошибка smile 
надо было написать
Код


        for(int i=0;i<250&&password[i]!='\0';i++)




Цитата(opjox @  20.2.2008,  15:37 Найти цитируемый пост)
ненужные директивы #pragma и vcl.h 

Согласен, директивы бесполезные. 
Создавал в Unit в Consol Wizard, особо над этим и не задумывался, хотя, конечно, стоит!


Цитата(opjox @  20.2.2008,  15:37 Найти цитируемый пост)
3) все таки стоит проверять на возможность создания файла


Конечно стоит! Только где Вы увидели хотябы намёк, в главном вопросе этого топика. что файл надо проверить?... smile  






PM MAIL   Вверх
jmp
Дата 21.2.2008, 16:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 13.12.2007

Репутация: нет
Всего: нет



Спасибо
new_web,
opjox!
 
нда,
Цитата(new_web @  21.2.2008,  01:35 Найти цитируемый пост)
Конечно стоит! Только где Вы увидели хотябы намёк, в главном вопросе этого топика. что файл надо проверить?... 

верно, я знаю как это сделать, потому не спашивал
Код

ifstream x("x.x");
    if(!x)
    {
        cerr<<"error nah :D";
}

------------------------------------------------------------
opjox,
Код

for(int i=0;pass[i];i++) {
    switch(pass[i]) {
      case 'a': pass[i]='U'; break;
      // и так далее:     case '': pass[i]=''; break;
      default: 


в твоем коде мне немного непонятно использование switch-й, выходит они неоченьто от IFов отличаються? 
ух воттето да


PM MAIL   Вверх
jmp
Дата 21.2.2008, 18:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 13.12.2007

Репутация: нет
Всего: нет



кстати еще вопрос по существу,

неужели придеться описывать как для прописных так и для заглавных букв?

нельзяли сделать чтото вроде

 
Код

case 'a'||'A':


PM MAIL   Вверх
Kanes
Дата 21.2.2008, 19:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 161
Регистрация: 11.3.2005

Репутация: нет
Всего: нет



Нет, так нельзя можно использовать только целые и символьные константы, либо константные выражения, приводящие к вычислению значения одного из указанных типов.
--------------------
Big gun - big future  
PM MAIL   Вверх
opjox
Дата 22.2.2008, 00:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 90
Регистрация: 17.1.2008

Репутация: 2
Всего: 14



Цитата(new_web @  21.2.2008,  01:35 Найти цитируемый пост)
Конечно стоит! Только где Вы увидели хотябы намёк, в главном вопросе этого топика. что файл надо проверить?...   

Намек – это начало работы с файлом smile По крайней мере – для меня.
Этот пункт больше моя придирка, чем какой-то существенный недостаток. Попросту, на мой взгляд, лучше не опускать подобное, когда показываешь пример новичкам. 

Цитата(jmp @  21.2.2008,  16:16 Найти цитируемый пост)
в твоем коде мне немного непонятно использование switch-й, выходит они неоченьто от IFов отличаються? 

Да, различия не велики, но они есть.

Цитата(jmp @  21.2.2008,  18:37 Найти цитируемый пост)
кстати еще вопрос по существу,неужели придеться описывать как для прописных так и для заглавных букв?

Можно или привести строку к одному регистру, или писать так (для случая со switch() ):
Код

case 'a': case 'A': pass[i]='U'; break;


PM MAIL ICQ   Вверх
jmp
Дата 22.2.2008, 12:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 13.12.2007

Репутация: нет
Всего: нет



Цитата(opjox @  22.2.2008,  00:09 Найти цитируемый пост)
на мой взгляд, лучше не опускать подобное, когда показываешь пример новичкам.

ээ, нет, скажу как новичек, это лишний перегруз головы, начинаеш гадать, а зачем здесь так, почему, от этого код становиться еще непонятнее :(

Цитата(opjox @  22.2.2008,  00:09 Найти цитируемый пост)
Можно или привести строку к одному регистру, или писать так (для случая со switch() ):

Код


case 'a': case 'A': pass[i]='U'; break;

Ух, спасибо!! пашт! smile 

Это сообщение отредактировал(а) jmp - 22.2.2008, 12:38
PM MAIL   Вверх
Dronchik
Дата 23.2.2008, 04:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Звукач ёмаё
**


Профиль
Группа: Участник
Сообщений: 451
Регистрация: 1.5.2007

Репутация: 1
Всего: 37



jmp, я потом юзер что либо неправильно сделает, и если у тебя на его действие нет обработчика событий то конец программе. Гораздо проще сразу научиться писать и понимать проверку и обработчики ошибок. имхо.


--------------------
Вместо слов делай дело, от которого ты фанатеешь. (с)

PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1562 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.