Вверх ↑
Ответов: 5446
Рейтинг: 323
#1: 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