Вверх ↑
Этот топик читают: Гость
Разработчик
Ответов: 26163
Рейтинг: 2127
#16: 2011-02-13 22:57:33 ЛС | профиль | цитата
И на кой черт для текста применяется блочный доступ
------------ Дoбавленo в 22.57:
А вот это для чего


_hi_CreateEvent(_Data, @onAcquire, _DoData("OK"));

Почему _DoData
карма: 22

0
Ответов: 5446
Рейтинг: 323
#17: 2011-02-13 23:17:44 ЛС | профиль | цитата
nesco, шифры - блочные, т.е. за раз шифруется блок определённой длины.
А почему DoData - а как надо? Я же говорю - для HiAsm писать не обучен...
карма: 1

0
Разработчик
Ответов: 26163
Рейтинг: 2127
#18: 2011-02-13 23:51:40 ЛС | профиль | цитата
iarspider писал(а):
а как надо?

Если просто OK вывести, то


_hi_CreateEvent(_Data, @onAcquire, 'OK');

А зачем в функции doCrypt куча телодвижений, почему не сразу криптование, согласно рыбе
------------ Дoбавленo в 23.42:
В рыбе есть одна неточность -- нет очистки ключа CryptDestroyKey
------------ Дoбавленo в 23.46:
И что такое PlainText_in и CypherText_in
------------ Дoбавленo в 23.48:
Короче, поставь нормально задачу - есть то, то и то, надо на выходе пллучить -- это, это и это. И методы описать надо бы, что чего делать должно и что на выход попасть
------------ Дoбавленo в 23.51:
И еще -- это очень срочно надо или может подождать до завтра, послезавтра
карма: 22

0
Ответов: 5446
Рейтинг: 323
#19: 2011-02-14 11:07:40 ЛС | профиль | цитата
nesco, отвечаю:
1. В "рыбе" все те же дополнительные телодвижения (создание и вычисление хеша, создание ключа по хешу), что и в моём коде
2. В строке 72 кода надо из верхней точки Key (забыл вчера добавить ) считать пароль (pascal-строку) и сделать из неё ANSI-строку (NULL-terminated). В той же строке вместо второго "{???}" нужно подставить длину пароля.
3. В строке 79 (которая, очевидно, расползётся на несколько строк) нужно считывать блоками (по 64 байта) данные для шифрования (строку? поток? как там правильнее с т.з. стиля) с Plaintext_in. Делаем хитрый финт ушами:
var
dwDataLen: DWORD;
dwBufferLen: DWORD;
pbData: PCHAR; {pointer to char}
{...}
{ ?? Читаем данные c Plaintext_in в pDaraBlock, не более 64 байт за раз ?? }
{ ?? dwDataLen: сколько считано данных; ?? }
CryptEncrypt(hKey, NULL, {EOF}, 0, NULL, @dwDataLen, 0); {EOF - признак конца данных}
dwBufferLen = dwDataLen
GetMem(pbData, dwBufferLen); {выделяем достаточный объём памяти для хранения шифрованного текста}
CryptEncrypt(hKey, NULL, {EOF}, 0, pbData, @dwDataLen, dwBufferLen); {EOF - признак конца данных}
Зашифрованные данные складываем во временный буфер
4. Когда всё зашифровали - выдаём содержимое буфера в поток (и сохраняем для выдачи на нижнюю точку Cyphertext).

Обратную процедуру я и сам доделаю по образцу.
------------ Дoбавленo в 11.07:
И да - это не очень срочно.
карма: 1

0
Разработчик
Ответов: 26163
Рейтинг: 2127
#20: 2011-02-14 11:48:10 ЛС | профиль | цитата
iarspider писал(а):
Обратную процедуру я и сам доделаю по образцу

Надо все сразу делать, а то правильность шифрования/дешифрования фиг проверишь
iarspider писал(а):
нужно считывать блоками (по 64 байта)

Почему именно 64, почему не 512, откуда эта цифра
------------ Дoбавленo в 11.43:
Да, а на каком типе кодирования проверть будем

PROV_RSA_FULL: ProvTypeToStr := 'RSA full provider';
PROV_RSA_SIG: ProvTypeToStr := 'RSA signature provider';
PROV_DSS: ProvTypeToStr := 'DSS provider';
PROV_DSS_DH: ProvTypeToStr := 'DSS and Diffie-Hellman provider';
PROV_FORTEZZA: ProvTypeToStr := 'Fortezza provider';
PROV_MS_EXCHANGE: ProvTypeToStr := 'MS Exchange provider';
PROV_RSA_SCHANNEL: ProvTypeToStr := 'RSA secure channel provider';
PROV_SSL: ProvTypeToStr := 'SSL provider';

------------ Дoбавленo в 11.48:
Насколько я понял, то использовать будем PROV_RSA_FULL

Однако на любом компьютере с Windows можно найти Microsoft Base Cryptographic Provider, относящийся к уже известному нам типу PROV_RSA_FULL
...
По составу функций и обеспечивающих их алгоритмов криптопровайдеры подразделяются на типы. Например, любой CSP типа PROV_RSA_FULL поддерживает как шифрование, так и цифровые подписи, использует для обмена ключами и создания подписей алгоритм RSA, для шифрования — алгоритмы RC2 и RC4, а для хеширования — MD5 и SHA


А остальные параметры какие, в рыбе -- RC4 и SHA, а почему не другие
карма: 22

0
Ответов: 5446
Рейтинг: 323
#21: 2011-02-14 13:31:23 ЛС | профиль | цитата
nesco, если сделаешь сам - будет гут.

64 - это размер блока, взят из документации MSDN (и бережно скопированное в таблицу в моём 2м посте в этой теме.). Можно любое число, кратное размеру блока.

PROV_XXX - это не тип кодирования, а криптопровайдер (набор криптографических функций). Использовать будем "Microsoft Enhanced Cryptographic Provider v1.0" (там больше ассортимент).

SHA можно (нужно - так как для SHA надо ещё подсмотреть значение константы) на MD5 заменить.

Список шифров - в таблице на первой странице. Есть ещё поточные шифры (тот же RC4), там проще делается - сразу весь поток загоняется с EOF = TRUE. Шифр будет пользователем выбираться (когда - и если - Dilma одобрит включение этого кода в компонент Cryptography)
карма: 1

0
Разработчик
Ответов: 26163
Рейтинг: 2127
#22: 2011-02-14 14:11:23 ЛС | профиль | цитата
iarspider писал(а):
Есть ещё поточные шифры (тот же RC4)

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

{создаем ключ на основании пароля для потокового шифра RC4}
CryptDeriveKey(hProv, CALG_RC4, hash, 0, @key);


Что странно и не вяжется с твоим

iarspider писал(а):
сразу весь поток загоняется с EOF = TRUE

------------ Дoбавленo в 14.11:
Так может остановимся на поточном шифре, нафиг нам поблочный
карма: 22

0
Ответов: 5446
Рейтинг: 323
#23: 2011-02-14 15:25:30 ЛС | профиль | цитата
nesco, "пусть расцветут все цветы". Про RC4 - посмотри код [url=http://forum.ixbt.com/topic.cgi?id=40:3020#5]тут[/url].
карма: 1

0
Разработчик
Ответов: 26163
Рейтинг: 2127
#24: 2011-02-14 15:35:15 ЛС | профиль | цитата
А ничего, что строка будет содержать служебные символы Я нашел код, где результирующая строка специально преобразуется в HEX, что бы исключить служебные символы и иметь только чистый текст.

Короче, я тебе делаю шифратор по алгоритму RC4, дальше думаешь сам
карма: 22

0
Ответов: 5446
Рейтинг: 323
#25: 2011-02-14 15:54:25 ЛС | профиль | цитата
nesco, а нынешний Crypt же тоже на выходе может давать "служебные символы", так что не надо ничего делать.
------------ Дoбавленo в 15.54:
По поводу блочного чтения в "рыбе": это видимо сделано для экономии памяти.
карма: 1

0
Разработчик
Ответов: 26163
Рейтинг: 2127
#26: 2011-02-15 10:11:43 ЛС | профиль | цитата
iarspider писал(а):
По поводу блочного чтения в "рыбе": это видимо сделано для экономии памяти

Современные компы без проблем могут сжать до 100 Mb, куда уж больше Ну давай попробуем по блокам сжимать
------------ Дoбавленo в 01.53:
Вот первое приближение -- -- заменен на более предпочтительный вариант, тк не дает никакого преимущества, ни в скорости, ни в потреблении памяти --
------------ Дoбавленo в 08.58:
Вариант прямого безбуферного шифрования, для метода шифрования RC4 более прдпочтительный -- -- удален --
------------ Дoбавленo в 10.11:
Продолжение безбуферного варианта, убрана ненужна переменная -- cryptapi_3.sha
карма: 22

0
файлы: 1cryptapi_3.sha [8.5KB] [385]
Ответов: 5446
Рейтинг: 323
#27: 2011-02-15 11:07:03 ЛС | профиль | цитата
nesco, а чего ты дефолтного провайдера пользуешь, а не "Microsoft Enhanced Cryptographic Provider v1.0"?
карма: 1

0
Разработчик
Ответов: 26163
Рейтинг: 2127
#28: 2011-02-15 11:41:32 ЛС | профиль | цитата
iarspider писал(а):
Microsoft Enhanced Cryptographic Provider v1.

В Винде он и есть дефолтный, если я не ошибаюсь. Хотя, я могу и ошибаться, надо почитать внимательней
------------ Дoбавленo в 11.34:
Действительно, лоханулся, держи версию с расширенным шифрованием -- cryptapi_enhanced.sha
------------ Дoбавленo в 11.40:
Можно смело выкинуть проверку на пустой пароль и строку, оно и так шифрует, с пустым паролем -- cryptapi_enhanced_2.sha
------------ Дoбавленo в 11.41:
Ну че, пойдет
карма: 22

0
файлы: 2cryptapi_enhanced.sha [8.5KB] [345], cryptapi_enhanced_2.sha [8.5KB] [348]
Ответов: 5446
Рейтинг: 323
#29: 2011-02-15 11:52:10 ЛС | профиль | цитата
nesco, сейчас сравню работу с C-шной версией. Вопрос сразу: а нафига ты Wide-версию используешь, у нас же unicode-ом в четвёрке и не пахнет?
карма: 1

0
Ответов: 1891
Рейтинг: 110
#30: 2011-02-15 11:57:11 ЛС | профиль | цитата
nesco, это все будет оформлено новым компонентом или останется как IC ?
карма: 0
%time%
0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)