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

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Аватара пользователя
Губин Игорь
✯ Ветеран ✯
Сообщения: 2303
Зарегистрирован: 16 Сентябрь 2005, 16:35
Откуда: Москва
Поблагодарили: 17 раз

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

Сообщение Губин Игорь »

Игорь Столяров писал(а):Что касается сообщения по WinXP - то оно на совести того, кто оставил коммент ... я такого никогда не слышал.
http://support.microsoft.com/kb/899420/ru
У меня все ходы записаны :)
Тоже было выпущено исправление через некоторое время. :P
Игорь Столяров писал(а):Кстати, а ты знаешь, что там внутри этих LIB ? Там может быть тот же самый вызов CryptoAPI ... завернутый в LIB. Вот и все.
Не думаю. Уж больно стары библиотеки. Да и исходников в сети полно. Смысла делать специальные либы не было. Во всяком случае могу сказать одно: работают они устойчиво вне зависимости от версий Windows и установленных обновлений.
Это я только кажусь дураком! На самом деле я полный идиот!
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7337
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

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

Сообщение Игорь Столяров »

Ну как говорил Райкин "Ты меня уважаешь и я тебя уважаю. Мы оба - уважаемые люди !" :)
Хорошо, что есть два стабильно работающих решения - есть из чего выбирать. :)
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
Губин Игорь
✯ Ветеран ✯
Сообщения: 2303
Зарегистрирован: 16 Сентябрь 2005, 16:35
Откуда: Москва
Поблагодарили: 17 раз

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

Сообщение Губин Игорь »

ВАХ!
Это я только кажусь дураком! На самом деле я полный идиот!
Developer
Ветеран
Сообщения: 551
Зарегистрирован: 26 Март 2012, 17:18

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

Сообщение Developer »

Губин Игорь писал(а): Есть набор LIB реализующих MD5, SHA1 и SHA256 быстро и удобно.
Вопрос: есть ли готовые LIB для Clarion реализующих SHA-512 и новый SHA-3 (Keccak) и примеры к ним?
С Уважением, Developer
Аватара пользователя
RaFaeL
✯ Ветеран ✯
Сообщения: 1376
Зарегистрирован: 24 Март 2009, 17:59
Откуда: НН
Благодарил (а): 7 раз
Поблагодарили: 1 раз
Контактная информация:

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

Сообщение RaFaeL »

Игорь Столяров писал(а): 10 Февраль 2014, 12:391. А чем получение SHA1 через WinAPI не устраивает ?
Работает много лет на всех Win от 2000 до 8.1 ... я код прикрепил, попробуй.
По моему все весьма тривиально.
Два вопроса - что делает GetGUID() и как получить SHA1 по секретному ключу? Т.е. должно быть два параметра - строка, секретный ключ
Аватара пользователя
RaFaeL
✯ Ветеран ✯
Сообщения: 1376
Зарегистрирован: 24 Март 2009, 17:59
Откуда: НН
Благодарил (а): 7 раз
Поблагодарили: 1 раз
Контактная информация:

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

Сообщение RaFaeL »

CryptGetHashParam возвращает хэш в бинарном формате, как его перевести в строку? Пробую CryptBinaryToStringA но он какие-то единичные буквы выдает, видимо что-то не то передаю? Или есть другое решение?
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7337
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

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

Сообщение Игорь Столяров »

Если не вдаваться в подробности и предположить, что Вы правильно получили бинарный 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"... ;)
Последний раз редактировалось Игорь Столяров 06 Июль 2017, 15:37, всего редактировалось 1 раз.
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3131
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 10 раз
Поблагодарили: 28 раз
Контактная информация:

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

Сообщение Дед Пахом »

У меня так:

Код: Выделить всё

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
С уважением, ДП
Аватара пользователя
RaFaeL
✯ Ветеран ✯
Сообщения: 1376
Зарегистрирован: 24 Март 2009, 17:59
Откуда: НН
Благодарил (а): 7 раз
Поблагодарили: 1 раз
Контактная информация:

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

Сообщение RaFaeL »

Зашел стереть вопрос так как ответ нашел в примере выше, а тут уже еще ответы )
А по хэшированию по ключу есть предложения? ) А то до этого не дошел пока
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7337
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

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

Сообщение Игорь Столяров »

Дед Пахом писал(а): 06 Июль 2017, 15:33У меня так:
Моя проще делает, потому, что моя знает что SHA1 всегда 20 byte ... ;)
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3131
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 10 раз
Поблагодарили: 28 раз
Контактная информация:

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

Сообщение Дед Пахом »

Ну да, и для скажем SHA512 надо новый код писать :-)
Кстати в моём примере STRING(LEN(pHashValue) * 3) надо бы заменить на STRING(LEN(pHashValue) * 2) (забыл это сделать, вначале я показывал пробел-разделитель между парами байтов).
С уважением, ДП
Аватара пользователя
RaFaeL
✯ Ветеран ✯
Сообщения: 1376
Зарегистрирован: 24 Март 2009, 17:59
Откуда: НН
Благодарил (а): 7 раз
Поблагодарили: 1 раз
Контактная информация:

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

Сообщение 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 разобраться
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7337
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

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

Сообщение Игорь Столяров »

Не, ну расчёт хеша SHA1 это попутная задача для CryptoAPI, можно обойтись и более простыми средствами ...
Я использую CryptoAPI по её прямому назначению (шифрованиеи и ЭЦП) и есстесно проще и хеш расчитать уже через неё не заморачиваясь ...
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
RaFaeL
✯ Ветеран ✯
Сообщения: 1376
Зарегистрирован: 24 Март 2009, 17:59
Откуда: НН
Благодарил (а): 7 раз
Поблагодарили: 1 раз
Контактная информация:

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

Сообщение 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
seawolf
Старожил
Сообщения: 213
Зарегистрирован: 08 Июль 2005, 11:23
Откуда: St. Petersburg

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

Сообщение seawolf »

Столкнулся с тем, что на некоторых компьютерах (чистых без кларион) через Crypto API - MD5 не вычисляется. Проблема лечится установкой runtime C+ из пакета установщика Clarion. Десятку одну так удалось победить, а вот Windows8 не хочет вылечиваться. Большая часть парка работает по умолчанию. Видимо чего-то этой Crypto API не хватает по умолчанию из коробки.
Ответить