Страница 2 из 4

Re: md5() или другие алгоритмы шифрования

Добавлено: 10 Февраль 2014, 14:14
Губин Игорь
Игорь Столяров писал(а):Что касается сообщения по WinXP - то оно на совести того, кто оставил коммент ... я такого никогда не слышал.
http://support.microsoft.com/kb/899420/ru
У меня все ходы записаны :)
Тоже было выпущено исправление через некоторое время. :P
Игорь Столяров писал(а):Кстати, а ты знаешь, что там внутри этих 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 не хватает по умолчанию из коробки.