Страница 2 из 4
Re: md5() или другие алгоритмы шифрования
Добавлено: 10 Февраль 2014, 14:14
Губин Игорь
Игорь Столяров писал(а):Что касается сообщения по WinXP - то оно на совести того, кто оставил коммент ... я такого никогда не слышал.
http://support.microsoft.com/kb/899420/ru
У меня все ходы записаны

Тоже было выпущено исправление через некоторое время.
Игорь Столяров писал(а):Кстати, а ты знаешь, что там внутри этих LIB ? Там может быть тот же самый вызов CryptoAPI ... завернутый в LIB. Вот и все.
Не думаю. Уж больно стары библиотеки. Да и исходников в сети полно. Смысла делать специальные либы не было. Во всяком случае могу сказать одно: работают они устойчиво вне зависимости от версий Windows и установленных обновлений.
Re: md5() или другие алгоритмы шифрования
Добавлено: 10 Февраль 2014, 14:25
Игорь Столяров
Ну как говорил Райкин "Ты меня уважаешь и я тебя уважаю. Мы оба - уважаемые люди !"

Хорошо, что есть два стабильно работающих решения - есть из чего выбирать.

Re: md5() или другие алгоритмы шифрования
Добавлено: 10 Февраль 2014, 14:45
Губин Игорь
ВАХ!
md5() или другие алгоритмы шифрования
Добавлено: 24 Март 2017, 12:55
Developer
Губин Игорь писал(а): Есть набор LIB реализующих MD5, SHA1 и SHA256 быстро и удобно.
Вопрос: есть ли готовые LIB для Clarion реализующих SHA-512 и новый SHA-3 (Keccak) и примеры к ним?
md5() или другие алгоритмы шифрования
Добавлено: 06 Июль 2017, 10:16
RaFaeL
Игорь Столяров писал(а): 10 Февраль 2014, 12:391. А чем получение SHA1 через WinAPI не устраивает ?
Работает много лет на всех Win от 2000 до 8.1 ... я код прикрепил, попробуй.
По моему все весьма тривиально.
Два вопроса - что делает GetGUID() и как получить SHA1 по секретному ключу? Т.е. должно быть два параметра - строка, секретный ключ
md5() или другие алгоритмы шифрования
Добавлено: 06 Июль 2017, 14:56
RaFaeL
CryptGetHashParam возвращает хэш в бинарном формате, как его перевести в строку? Пробую CryptBinaryToStringA но он какие-то единичные буквы выдает, видимо что-то не то передаю? Или есть другое решение?
md5() или другие алгоритмы шифрования
Добавлено: 06 Июль 2017, 15:30
Игорь Столяров
Если не вдаваться в подробности и предположить, что Вы правильно получили бинарный SHA1,
то мы можем легко его трансформировать в "читабельный" вид. Например вот так:
Код: Выделить всё
Loc:String String(40)
Loc:Count Byte
Loc:SHA1 String(20)
Code
Loc:SHA1 = GetMySHA1() ! Ваши манипуляции по получению хэша
Clear(Loc:String)
Loop Loc:Count = 1 to 20 by 1
Loc:String = Clip(Loc:String) & BYTETOHEX(Val(Loc:SHA1[Loc:Count]),0)
end
Message(Loc:String)
Примерно так. По вкуcу - добавить Upper() или заменить второй параметр BYTETOHEX() на "1"...

md5() или другие алгоритмы шифрования
Добавлено: 06 Июль 2017, 15:33
Дед Пахом
У меня так:
Код: Выделить всё
Hash2Hex PROCEDURE(STRING pHashValue)
hexstr STRING(LEN(pHashValue) * 3)
cIndex Long, AUTO
CODE
LOOP cIndex = 1 TO LEN(pHashValue)
hexstr[cIndex * 2 - 1 : cIndex * 2] = BYTETOHEX(VAL(pHashValue[cIndex]), 0)
END
RETURN hexstr
md5() или другие алгоритмы шифрования
Добавлено: 06 Июль 2017, 15:49
RaFaeL
Зашел стереть вопрос так как ответ нашел в примере выше, а тут уже еще ответы )
А по хэшированию по ключу есть предложения? ) А то до этого не дошел пока
md5() или другие алгоритмы шифрования
Добавлено: 06 Июль 2017, 15:57
Игорь Столяров
Дед Пахом писал(а): 06 Июль 2017, 15:33У меня так:
Моя проще делает, потому, что моя знает что SHA1 всегда 20 byte ...

md5() или другие алгоритмы шифрования
Добавлено: 06 Июль 2017, 16:06
Дед Пахом
Ну да, и для скажем SHA512 надо новый код писать

Кстати в моём примере STRING(LEN(pHashValue) * 3) надо бы заменить на STRING(LEN(pHashValue) * 2) (забыл это сделать, вначале я показывал пробел-разделитель между парами байтов).
md5() или другие алгоритмы шифрования
Добавлено: 06 Июль 2017, 20:07
RaFaeL
А теперь вопрос
Зачем я весь день потратил на CryptoAPI если самое правильное решение это
Код: Выделить всё
MODULE('libeay32.dll')
SHA1(LONG buffer, LONG bufferlen, LONG outstr),RAW,C,NAME('SHA1')
END
Код: Выделить всё
LOC:Ret CSTRING(41)
LOC:BHash CSTRING(21)
LOC:BHashD BYTE,DIM(20),OVER(LOC:BHash)
CODE
SHA1(address(Str_),len(clip(Str_)),address(LOC:BHash))
loop i# = 1 to 20
LOC:Ret = LOC:Ret & bytetohex(LOC:BHashD[i#], 1)
end
Осталось с HMAC разобраться
md5() или другие алгоритмы шифрования
Добавлено: 06 Июль 2017, 20:50
Игорь Столяров
Не, ну расчёт хеша SHA1 это попутная задача для CryptoAPI, можно обойтись и более простыми средствами ...
Я использую CryptoAPI по её прямому назначению (шифрованиеи и ЭЦП) и есстесно проще и хеш расчитать уже через неё не заморачиваясь ...
md5() или другие алгоритмы шифрования
Добавлено: 06 Июль 2017, 22:02
RaFaeL
Может надо кому )) С онлайн-конвертерами ответ сходится. На CryptoAPI так и не дошла голова как реализовать, какие-то структуры мутные в примерах, тут намного проще и нагляднее
Код: Выделить всё
MODULE('libeay32.dll')
EVP_sha1(),LONG,RAW,C,NAME('EVP_sha1')
HMAC(LONG EVP, LONG secret, LONG secretlen, LONG buffer, LONG bufferlen, LONG md, LONG mdlen),*CSTRING,RAW,C,NAME('HMAC')
END
Код: Выделить всё
HMAC_SHA1 procedure(string str_,string key_)
LOC:Ret CSTRING(41)
LOC:HMAC CSTRING(21)
CODE
LOC:HMAC=HMAC(EVP_sha1(),address(key_),len(clip(key_)),address(Str_),len(clip(Str_)),0,0)
loop i# = 1 to 20
LOC:Ret = LOC:Ret & bytetohex(val(LOC:HMAC[i#]), 1)
end
md5() или другие алгоритмы шифрования
Добавлено: 24 Январь 2020, 10:36
seawolf
Столкнулся с тем, что на некоторых компьютерах (чистых без кларион) через Crypto API - MD5 не вычисляется. Проблема лечится установкой runtime C+ из пакета установщика Clarion. Десятку одну так удалось победить, а вот Windows8 не хочет вылечиваться. Большая часть парка работает по умолчанию. Видимо чего-то этой Crypto API не хватает по умолчанию из коробки.