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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как в C++ Builder 5 зашифровать строку, Login+Password 
:(
    Опции темы
VisualCraft
  Дата 15.12.2003, 01:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Народ подскажите плиз!
Как в в C++ Builder 5 зашифровать строку, например логин+пароль.
Искал стандартные функции шифрования и не нашел.
Пришлось пока свой оригинальный алгоритм смастерить, сгодится за третий сорт... но это не есть гуд.

Строка не передается на сервер, а записывается в локальную базу данных пользователя, поэтому нужно шифрование без возможности восстановления исходных логина и пароля по ключу. Но при повторном вводе логина и пароля результат шифрования должен получаться всегда один и тот-же -
(128 байтная бинарная последовательность).

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



PM MAIL   Вверх
<Spawn>
Дата 15.12.2003, 03:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

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



Открываешь IndyMisc и смортишь там TidBase64Encoder, TidBase64Decoder, TidUUEncoder, TidUUDecoder и т.д.


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
Ars
Дата 15.12.2003, 11:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 325
Регистрация: 28.8.2003
Где: Московская обл.

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



Смотри CryptoAPI (ф-ции CryptEncrypt, CryptDecrypt)


--------------------
Есть многое на свете, друг Горацио,
С чем очень долго можно прое..!
PM MAIL   Вверх
SeregaLBN
Дата 15.12.2003, 14:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 178
Регистрация: 3.10.2003
Где: Киев

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



алгоритм BASE64:

void Base64_code(IN const CHAR* strIn, OUT CString& strOut) {
const static CHAR base64ABC[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
strOut.Empty();
const size_t len = strlen(strIn);
for(int i=0; i<len; i+=3) {
LONG l = ( ((LONG)strIn[i ])<<16 ) |
(((i+1) < len) ? (((LONG)strIn[i+1])<<8 ) : 0 ) |
(((i+2) < len) ? ( (LONG)strIn[i+2] ) : 0 );
strOut += base64ABC[(l>>18) & 0x3F];
strOut += base64ABC[(l>>12) & 0x3F];
if (i+1 < len) strOut += base64ABC[(l>> 6) & 0x3F];
if (i+2 < len) strOut += base64ABC[(l ) & 0x3F];
}
switch (len%3) {
case 1:
strOut += '=';
case 2:
strOut += '=';
}
}


void Base64_decode(
IN const CHAR* strIn, // на вход - зашифрованная строка
OUT CString& strOut // на выход - расшифрованная строка
) {
const static CHAR base64ABC[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
strOut.Empty();
const size_t len = strlen(strIn);
for (int i=0; i<len; i+=4) {
LONG l =
(( (strIn[i ] != '=')) ? (((LONG)(strchr(base64ABC, strIn[i ]) - base64ABC)) << 18) : 0) |
((((i+1) < len) && (strIn[i+1] != '=')) ? (((LONG)(strchr(base64ABC, strIn[i+1]) - base64ABC)) << 12) : 0) |
((((i+2) < len) && (strIn[i+2] != '=')) ? (((LONG)(strchr(base64ABC, strIn[i+2]) - base64ABC)) << 6 ) : 0) |
((((i+3) < len) && (strIn[i+3] != '=')) ? ((LONG)(strchr(base64ABC, strIn[i+3]) - base64ABC)) : 0);

BYTE ch1 = ((l>>16) & 0xFF); if (ch1) strOut += ch1;
BYTE ch2 = ((l>>8 ) & 0xFF); if (ch2) strOut += ch2;
BYTE ch3 = ( l & 0xFF); if (ch3) strOut += ch3;
}
}

//Ну и как бонус smile.gif функция для формировки заголовка авторизации по логину и паролю:
void GetHeaderAuthorization(
IN const CString& strLogin, // на вход - строка с логином
IN const CString& strPassword, // на вход - строка с паролем
OUT CString& strHeaderAuthorization // на выход - сторка, содержащая заголовок авторизации
){
CString strLoginPass(strLogin + ':' + strPassword); // формирую строку для шифрования
CString strEncode; // сторка, где будет содержаться результат шифрования
Base64_code(strLoginPass, strEncode); // шифрование
strHeaderAuthorization = CString("Authorization: Basic " + strEncode + "\r\n"); // формирую заголовок авторизации
}
PM MAIL   Вверх
VisualCraft
Дата 15.12.2003, 18:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Ars,Spawn,SeregaLBN мучас грациес за вспомоществование! Буду пилить...

Ars
А где это API и доку найти?

SeregaLBN
Спасибо за алгоритм, я оказывается что-то в этом роде сварганил, только без массива, типа BASE256 smile.gif

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


Опытный
**


Профиль
Группа: Участник
Сообщений: 325
Регистрация: 28.8.2003
Где: Московская обл.

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



Цитата
А где это API и доку найти?

Я, когда занимался этим вопросом, в хелпе по Win32 всю необходимую инфу нашел.


--------------------
Есть многое на свете, друг Горацио,
С чем очень долго можно прое..!
PM MAIL   Вверх
oleg1973
Дата 15.12.2003, 23:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


asm fanat
****


Профиль
Группа: Экс. модератор
Сообщений: 3283
Регистрация: 16.7.2003
Где: Italy

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



XOR и все дела smile.gif
от дурака помогает smile.gif


--------------------
SST 465555
icq 200-512-712
PM MAIL WWW ICQ   Вверх
VisualCraft
Дата 16.12.2003, 13:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



А когда дурак не совсем дурак, имеет на руках несколько своих логинов и паролей, результат шифрования и саму программу в которой это делается, имеет право добавлять новых пользователей?

Задача

для такого юзера
1) воспрепятствовать входу под чужим паролем (одностороннее шифрование - метод 1).
2) затруднить идентификацию записей бызы в ручном режиме, чтоб крайне трудно было корректно отредактировать (симметричное шифрование - метод 2).
3) защитить код самой программы (ASPack)
4)Еще бы базу закрыть от всех кроме самой программы. Но база VFP6. Там кажется этого нет.

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

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

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


 




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


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

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