![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
VisualCraft |
|
|||
Новичок Профиль Группа: Участник Сообщений: 44 Регистрация: 24.11.2003 Репутация: нет Всего: нет |
Народ подскажите плиз!
Как в в C++ Builder 5 зашифровать строку, например логин+пароль. Искал стандартные функции шифрования и не нашел. Пришлось пока свой оригинальный алгоритм смастерить, сгодится за третий сорт... но это не есть гуд. Строка не передается на сервер, а записывается в локальную базу данных пользователя, поэтому нужно шифрование без возможности восстановления исходных логина и пароля по ключу. Но при повторном вводе логина и пароля результат шифрования должен получаться всегда один и тот-же - (128 байтная бинарная последовательность). Это нужно для "защиты от дурака" и частично для защиты данных в пределах рабочей группы. Полностью защитить все равно не удасться. |
|||
|
||||
<Spawn> |
|
|||
![]() Око кары:) ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2776 Регистрация: 29.1.2003 Где: Екатеринбург Репутация: нет Всего: 64 |
Открываешь IndyMisc и смортишь там TidBase64Encoder, TidBase64Decoder, TidUUEncoder, TidUUDecoder и т.д.
-------------------- "Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков. |
|||
|
||||
Ars |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 325 Регистрация: 28.8.2003 Где: Московская обл. Репутация: 2 Всего: 2 |
Смотри CryptoAPI (ф-ции CryptEncrypt, CryptDecrypt)
-------------------- Есть многое на свете, друг Горацио, С чем очень долго можно прое..! |
|||
|
||||
SeregaLBN |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 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; } } //Ну и как бонус ![]() 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"); // формирую заголовок авторизации } |
|||
|
||||
VisualCraft |
|
|||
Новичок Профиль Группа: Участник Сообщений: 44 Регистрация: 24.11.2003 Репутация: нет Всего: нет |
Ars,Spawn,SeregaLBN мучас грациес за вспомоществование! Буду пилить...
Ars А где это API и доку найти? SeregaLBN Спасибо за алгоритм, я оказывается что-то в этом роде сварганил, только без массива, типа BASE256 ![]() |
|||
|
||||
Ars |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 325 Регистрация: 28.8.2003 Где: Московская обл. Репутация: 2 Всего: 2 |
Я, когда занимался этим вопросом, в хелпе по Win32 всю необходимую инфу нашел. -------------------- Есть многое на свете, друг Горацио, С чем очень долго можно прое..! |
|||
|
||||
oleg1973 |
|
|||
![]() asm fanat ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3283 Регистрация: 16.7.2003 Где: Italy Репутация: 1 Всего: 34 |
XOR и все дела
![]() от дурака помогает ![]() -------------------- SST 465555 icq 200-512-712 |
|||
|
||||
VisualCraft |
|
|||
Новичок Профиль Группа: Участник Сообщений: 44 Регистрация: 24.11.2003 Репутация: нет Всего: нет |
А когда дурак не совсем дурак, имеет на руках несколько своих логинов и паролей, результат шифрования и саму программу в которой это делается, имеет право добавлять новых пользователей?
Задача для такого юзера 1) воспрепятствовать входу под чужим паролем (одностороннее шифрование - метод 1). 2) затруднить идентификацию записей бызы в ручном режиме, чтоб крайне трудно было корректно отредактировать (симметричное шифрование - метод 2). 3) защитить код самой программы (ASPack) 4)Еще бы базу закрыть от всех кроме самой программы. Но база VFP6. Там кажется этого нет. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |