Re[3]: Реализация UNIX'овского Crypt на Delphi?
От: Гай Россия  
Дата: 27.03.05 10:09
Оценка:
> Вообще говоря подойдёт любая one-way функция, совсем необязательно точно
> такая же как у UNIX, просто надо было от чего-то оттолкнуться.

Если односторонний, то это хэш.

var
hProv: HCRYPTPROV;
hHash: HCRYPTHASH;
dwLen, dwTmp: DWORD;
HashArray: array[0..31] of char; // Длина массива, чтоб хэш влезал
begin
CryptAcquireContext(@hProv, '', '', <Идентификатор криптопровайдера, я работаю
с ГОСТОМ через КриптоПро, поэтому стоит 75, ты вебери свой>, CRYPT_VERIFYCONTEXT);
CryptCreateHash(hProv, <идентификатор хеширующего алгоритма>, 0, 0, @hHash);
CryptHashData(hHash, @(Data[1]), Length(Data), 0);
dwTmp := sizeof(dwLen);
CryptGetHashParam(hHash, HP_HASHSIZE, @dwLen, @dwTmp, 0);
CryptGetHashParam(hHash, HP_HASHVAL, @HashArray, @dwLen, 0);
CryptDestroyHash(hHash);
CryptReleaseContext(hProv, 0);
end;

После отработки в HashArray — хэш, посчитанный из Data, его и используй для
сверки пароля. Прототипы функций есть в модуле WinCrypt.pas, там же
идентификаторы стандартных провайдеров и алгоритмов, могу выслать.
Posted via RSDN NNTP Server 1.9
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.