Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Шифрование данных 
:(
    Опции темы
MrDmitry
Дата 19.10.2009, 23:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



парни помогите зашифровать/дешифровать файл

не давно создавал тему, там мне подскощали как создовать/загрузить файл

сохранение:
Код

std::auto_ptr<TStringList>list(new TStringList);
     list->Add(loginEdit->Text);
     list->Add(passEdit->Text);
     list->SaveToFile("user.dat")


Загрузка
Код

std::auto_ptr<TStringList>list(new TStringList);
     list->LoadFromFile("user.dat");
     String login = list->Strings[0];
         String pass = list->Strings[1];

     if(login == ""){
      Label3->Visible = true;
      CheckBox1->Visible = false;
     }
    else
    {
     loginEdit->Text = login;
     passEdit->Text = pass;


а как все это шифровать/дешифровать? метод не важен главное результат smile
PM MAIL   Вверх
mrbrooks
Дата 20.10.2009, 07:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

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



MrDmitry, совершенно верно - в данном случае ты работаешь просто с текстовым файлом. Но если ты посмотришь свою тему я тебе там выложил работу уже с бинарным файлом. Защита не ахти какая, но уже текстовым редактором не прочитаешь.
PM MAIL   Вверх
mrbrooks
Дата 20.10.2009, 08:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

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



Собственно в самом VCL есть шифрование, правда несколько банальное но в твоем случае этого достаточно имхо.

Код

#include <memory>
#include <encddecd.hpp>
//---------------------------------------------------------------------------
void __fastcall TMainForm::BtnSaveClick(TObject *Sender)
{
     std::auto_ptr<TStringList>list(new TStringList);
     list->Add("user: "+ loginEdit->Text);
     list->Add("password: " + passEdit->Text);
     list->Text = EncodeString(list->Text);
     std::auto_ptr<TFileStream>file(new TFileStream("user.dat",fmCreate));
     file->Write(list->Text.c_str(),list->Text.Length()*2);
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::BtnLoadClick(TObject *Sender)
{
     std::auto_ptr<TFileStream>file(new TFileStream("user.dat",fmOpenRead));
     wchar_t *buf = new wchar_t[file->Size];
     file->Read(buf,file->Size);
     std::auto_ptr<TStringList>list(new TStringList);
     list->Text = String(buf);
     list->Text = DecodeString(list->Text);
     String user = list->Strings[0];
     String pass = list->Strings[1];
}
//---------------------------------------------------------------------------


Если хочешь более кошерного решения - то придется юзать сторонние библиотеки. К примеру CryptoAPI.
PM MAIL   Вверх
vikaz
Дата 20.10.2009, 09:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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





--------------------
user posted image

Нет ничего настолько исправного, чтобы в нем не было ошибок. /Ф. Петрарка/ 
PM MAIL ICQ Skype   Вверх
MrDmitry
Дата 20.10.2009, 11:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(mrbrooks @ 20.10.2009,  07:43)
MrDmitry, совершенно верно - в данном случае ты работаешь просто с текстовым файлом. Но если ты посмотришь свою тему я тебе там выложил работу уже с бинарным файлом. Защита не ахти какая, но уже текстовым редактором не прочитаешь.

я видел твой вариант с бинарным файлом, заказчика он не устроил (
PM MAIL   Вверх
xvr
Дата 20.10.2009, 11:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

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



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

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


Опытный
**


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

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



Цитата(mrbrooks @ 20.10.2009,  08:00)
Собственно в самом VCL есть шифрование, правда несколько банальное но в твоем случае этого достаточно имхо.

Код

#include <memory>
#include <encddecd.hpp>
//---------------------------------------------------------------------------
void __fastcall TMainForm::BtnSaveClick(TObject *Sender)
{
     std::auto_ptr<TStringList>list(new TStringList);
     list->Add("user: "+ loginEdit->Text);
     list->Add("password: " + passEdit->Text);
     list->Text = EncodeString(list->Text);
     std::auto_ptr<TFileStream>file(new TFileStream("user.dat",fmCreate));
     file->Write(list->Text.c_str(),list->Text.Length()*2);
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::BtnLoadClick(TObject *Sender)
{
     std::auto_ptr<TFileStream>file(new TFileStream("user.dat",fmOpenRead));
     wchar_t *buf = new wchar_t[file->Size];
     file->Read(buf,file->Size);
     std::auto_ptr<TStringList>list(new TStringList);
     list->Text = String(buf);
     list->Text = DecodeString(list->Text);
     String user = list->Strings[0];
     String pass = list->Strings[1];
}
//---------------------------------------------------------------------------


Если хочешь более кошерного решения - то придется юзать сторонние библиотеки. К примеру CryptoAPI.

код работает но при каждом запуске выдает ошибку

Project iFlyCards.exe raised exeption class EStringListError with message "list index out of bounds (1)"

Добавлено через 2 минуты и 23 секунды
Цитата(xvr @ 20.10.2009,  11:49)
Пароли обычно не шифруют, а хранят однонаправленные криптографические хэши от них (например MD5 или SHA1). Хэш можно прогнать через вышеупомянутый EncodeString, получишь некий текст. 
Еще рекомендуется перед хэшированием пароля добавить к нему несколько случайных символов, и их же добавить к результирующему хэшу, что бы можно было позже проверить правильность пароля

честно говоря в c++ вообще пока не шарю, это мой 1 проект smile
можно для выше написаного пример? )
PM MAIL   Вверх
mrbrooks
Дата 20.10.2009, 12:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

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



Цитата(MrDmitry @  20.10.2009,  11:52 Найти цитируемый пост)
Project iFlyCards.exe raised exeption class EStringListError with message "list index out of bounds (1)"

у меня все ок. скорее всего ты что то не докопировал или добавил своего. Ошибка обращения к TStringList по индексу.

Цитата(MrDmitry @  20.10.2009,  11:52 Найти цитируемый пост)
честно говоря в c++ вообще пока не шарю, это мой 1 проект

это заметно.  smile 

Цитата(xvr @  20.10.2009,  11:49 Найти цитируемый пост)
Пароли обычно не шифруют, а хранят однонаправленные криптографические хэши от них (например MD5 или SHA1). 

Это да. Парню есть куда развиваться - но имхо - еще рановато. Пусть хотя бы вкурит функционал из <encddecd.hpp> smile 
PM MAIL   Вверх
MrDmitry
Дата 20.10.2009, 12:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(mrbrooks @ 20.10.2009,  12:04)
Цитата(MrDmitry @  20.10.2009,  11:52 Найти цитируемый пост)
Project iFlyCards.exe raised exeption class EStringListError with message "list index out of bounds (1)"

у меня все ок. скорее всего ты что то не докопировал или добавил своего. Ошибка обращения к TStringList по индексу.

Цитата(MrDmitry @  20.10.2009,  11:52 Найти цитируемый пост)
честно говоря в c++ вообще пока не шарю, это мой 1 проект

это заметно.  smile 

Цитата(xvr @  20.10.2009,  11:49 Найти цитируемый пост)
Пароли обычно не шифруют, а хранят однонаправленные криптографические хэши от них (например MD5 или SHA1). 

Это да. Парню есть куда развиваться - но имхо - еще рановато. Пусть хотя бы вкурит функционал из <encddecd.hpp> smile

вот сделал так


Код

//Загрузка
void __fastcall TAuthForm::FormShow(TObject *Sender)
{
std::auto_ptr<TFileStream>file(new TFileStream("user.dat",fmOpenRead));
     wchar_t *buf = new wchar_t[file->Size];
     file->Read(buf,file->Size);
     std::auto_ptr<TStringList>list(new TStringList);
     list->Text = String(buf);
     list->Text = DecodeString(list->Text);
     String login = list->Strings[0];
     String pass = list->Strings[1];

     if(login == ""){
      Label3->Visible = true;
      CheckBox1->Visible = false;
     }
    else
    {
     loginEdit->Text = login;
     passEdit->Text = pass;

      Label3->Visible = false;
      CheckBox1->Visible = true;
      CheckBox1->Checked = true;
    }
}

//Сохранение
void __fastcall TAuthForm::Label3Click(TObject *Sender)
{
  std::auto_ptr<TStringList>list(new TStringList);
     list->Add("user: "+ loginEdit->Text);
     list->Add("password: " + passEdit->Text);
     list->Text = EncodeString(list->Text);
     std::auto_ptr<TFileStream>file(new TFileStream("user.dat",fmCreate));
     file->Write(list->Text.c_str(),list->Text.Length()*2);

 Label3->Visible = false;
 CheckBox1->Checked = true;
 CheckBox1->Visible = true;

}


И вылазиет эта ошибка ((

Это сообщение отредактировал(а) MrDmitry - 20.10.2009, 12:17
PM MAIL   Вверх
xvr
Дата 20.10.2009, 12:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

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



Цитата(MrDmitry @ 20.10.2009,  11:52)
Цитата(xvr @ 20.10.2009,  11:49)
Пароли обычно не шифруют, а хранят однонаправленные криптографические хэши от них (например MD5 или SHA1). Хэш можно прогнать через вышеупомянутый EncodeString, получишь некий текст. 
Еще рекомендуется перед хэшированием пароля добавить к нему несколько случайных символов, и их же добавить к результирующему хэшу, что бы можно было позже проверить правильность пароля

честно говоря в c++ вообще пока не шарю, это мой 1 проект smile
можно для выше написаного пример? )

Можно:
Код

#include <encddecd.hpp>
#include "Md5.h"

static AnsiString encode_password_aux(AnsiString passwd, int r1, int r2)
{
 char b[16];
 AnsiString h("  ");
 h[1]=r1;
 h[2]=r2;
 h+=passwd;
 
 MD5 md5;
 md5.update(h.c_str(),h.Length());
 md5.final(b);

 return h.SubString(1,2)+AnsiString(b,16);
}

AnsiString encode_password(AnsiString passwd)
{
 return EncodeString(encode_password_aux(passwd,rand(),rand()));
}

bool check_password(AnsiString user_passwd, AnsiString password_from_file)
{
 password_from_file = DecodeString(password_from_file);
 return password_from_file==encode_password_aux(user_passwd,password_from_file[1],password_from_file[2]);
}

Функция encode_password зашифровывает пароль для записи в текстовый файл, функция check_password проверяет, что пароль из текстового файла и введенный пользователем совпадают

PS. Для BCB 6.0 конструкцию AnsiString(b,16) надо заменить на явное создание строки из 16ти символов и копирования в нее b, там в VCL ошибка  smile 

Присоединённый файл ( Кол-во скачиваний: 20 )
Присоединённый файл  md5.zip 3,88 Kb
PM MAIL   Вверх
mrbrooks
Дата 20.10.2009, 12:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

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



Цитата(MrDmitry @  20.10.2009,  12:16 Найти цитируемый пост)
И вылазиет эта ошибка ((

ты написал загрузку файла при появление формы. не факт что файл заполнен, и по этому TStringList пуст. А ты между тем обращаешься к его элементам, которых собственно и существует. Прежде чем загружать файл - проверь его длину.
PM MAIL   Вверх
MrDmitry
Дата 20.10.2009, 13:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(mrbrooks @ 20.10.2009,  12:34)
Цитата(MrDmitry @  20.10.2009,  12:16 Найти цитируемый пост)
И вылазиет эта ошибка ((

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

а что мне даст проверка его длины? ))

файл физически создается (я его вижу) и шефруется

проблема только в загрузки которую я не могу решить не как (((

пробовал вытаскивать функцию загрузки из FormShow и вставлять на клик button. тоже самое ((
PM MAIL   Вверх
mrbrooks
Дата 20.10.2009, 13:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

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



Цитата(MrDmitry @  20.10.2009,  13:14 Найти цитируемый пост)
а что мне даст проверка его длины? ))

есть ли в нем информация или нет, при условии что он создан. что тут не понятного?
PM MAIL   Вверх
MrDmitry
Дата 20.10.2009, 13:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



А как проверить его длину smile 
PM MAIL   Вверх
mrbrooks
Дата 20.10.2009, 13:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

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



Цитата(MrDmitry @  20.10.2009,  13:30 Найти цитируемый пост)
А как проверить его длину

если брать твой код за основу то примерно так:
Код

void __fastcall TAuthForm::FormShow(TObject *Sender)
{
     std::auto_ptr<TFileStream>file(new TFileStream("user.dat",fmOpenRead));
if(!file->Size)
{      
     wchar_t *buf = new wchar_t[file->Size];
     file->Read(buf,file->Size);
     std::auto_ptr<TStringList>list(new TStringList);
     list->Text = String(buf);
     list->Text = DecodeString(list->Text);
     String login = list->Strings[0];
     String pass = list->Strings[1];
     if(login == ""){
      Label3->Visible = true;
      CheckBox1->Visible = false;
     }
    else
    {
     loginEdit->Text = login;
     passEdit->Text = pass;
      Label3->Visible = false;
      CheckBox1->Visible = true;
      CheckBox1->Checked = true;
    }
}
else ShowMessage("Файл пуст!");
}





PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

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

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

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

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


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

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


 




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


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

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