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

Clarion, Clarion 7

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

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
mike_ch
Бывалый
Сообщения: 62
Зарегистрирован: 11 Июль 2007, 14:21
Откуда: Беларусь, Минск

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

Сообщение mike_ch »

Доброго времени суток всем форумчанам!
Подскажите пожалуйста, есть ли стандартные функции шифрования в Clarion или подскажите api функции, чтоб не изобретать велосипед. Я хочу функцию, которая выглядит и работает приблизительно следующим образом:

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

md5('123') = '202cb962ac59075b964b07152d234b70'
seawolf
Старожил
Сообщения: 213
Зарегистрирован: 08 Июль 2005, 11:23
Откуда: St. Petersburg

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

Сообщение seawolf »

поищи по форуму. Как сейчас помню кто-то выкладывал на сях текст и весь проект собирался на кларионе без проблем.
FinSoft
Посетитель
Сообщения: 49
Зарегистрирован: 21 Ноябрь 2006, 13:37

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

Сообщение FinSoft »

mike_ch писал(а):Доброго времени суток всем форумчанам!
Подскажите пожалуйста, есть ли стандартные функции шифрования в Clarion или подскажите api функции, чтоб не изобретать велосипед. Я хочу функцию, которая выглядит и работает приблизительно следующим образом:

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

md5('123') = '202cb962ac59075b964b07152d234b70'
Если память не изменяет, есть модуль на си от Александра Струменского в составе библиотеки отправки почты по smtp. Глянь в файловом архиве, там все в сырцах должно лежать.
kreator
✯ Ветеран ✯
Сообщения: 4960
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 6 раз
Поблагодарили: 19 раз

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

Сообщение kreator »

Есть ещё класс Messaging от SV. Там достаточно всё просто. Есть метод шифрования строки, есть метод дешифрования строки.
We are hard at work… for you. :)
IKSoft
Посетитель
Сообщения: 42
Зарегистрирован: 27 Май 2010, 13:38

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

Сообщение IKSoft »

попробуйте
это я для себя сделал
проблем не было
с исходниками

http://www.aniva-ltd.ru/bin/ik_md5.zip
mike_ch
Бывалый
Сообщения: 62
Зарегистрирован: 11 Июль 2007, 14:21
Откуда: Беларусь, Минск

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

Сообщение mike_ch »

IKSoft писал(а):попробуйте
это я для себя сделал
проблем не было
с исходниками

http://www.aniva-ltd.ru/bin/ik_md5.zip
Спасибо огромное, Дружище!
Но я уже сам реализовал через CryptAPI. Если будет интересно - завтра опишу как. Сегодня уже времени нет.
mike_ch
Бывалый
Сообщения: 62
Зарегистрирован: 11 Июль 2007, 14:21
Откуда: Беларусь, Минск

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

Сообщение mike_ch »

Вот как у меня получилось.

В секции After Global INCLUDEs

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

! Crypto API
CALG_MD5            equate(00008003h)
HP_HASHVAL          equate(2)
PROV_RSA_FULL       equate(1)
В секции Inside the Global Map

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

module('win32')
    ! Crypto API
    ! BOOL WINAPI CryptAcquireContext(_Out_  HCRYPTPROV *phProv,
                                !_In_   LPCTSTR pszContainer,
                                !_In_   LPCTSTR pszProvider,
                                !_In_   DWORD dwProvType,
                                !_In_   DWORD dwFlags)
    CryptAcquireContext(*ulong, <*cstring>, <*cstring>, ushort, ushort), bool, raw, pascal, name('CryptAcquireContextA')
    ! BOOL WINAPI CryptReleaseContext(_In_  HCRYPTPROV hProv,
                                     !_In_  DWORD dwFlags)
    CryptReleaseContext(ulong, ushort), bool, raw, pascal, proc
    ! BOOL WINAPI CryptCreateHash(_In_   HCRYPTPROV hProv,
                                !_In_   ALG_ID Algid,
                                !_In_   HCRYPTKEY hKey,
                                !_In_   DWORD dwFlags,
                                !_Out_  HCRYPTHASH *phHash)
    CryptCreateHash(ulong, ulong, ulong, ushort, *ulong), bool, raw, pascal, proc
    ! BOOL WINAPI CryptDestroyHash(_In_  HCRYPTHASH hHash)
    CryptDestroyHash(ulong), bool, raw, pascal, proc
    ! BOOL WINAPI CryptHashData(_In_  HCRYPTHASH hHash,
                                !_In_  BYTE *pbData,
                                !_In_  DWORD dwDataLen,
                                !_In_  DWORD dwFlags)
    CryptHashData(ulong, *?, ushort, ushort), bool, raw, pascal, proc
    !BOOL WINAPI CryptGetHashParam(_In_     HCRYPTHASH hHash,
                                !_In_     DWORD dwParam,
                                !_Out_    BYTE *pbData,
                                !_Inout_  DWORD *pdwDataLen,
                                !_In_     DWORD dwFlags)
    CryptGetHashParam(ulong, ushort, *?, *ushort, ushort), bool, raw, pascal, proc
end

! для функции bytetohex
INCLUDE('CWUTIL.INC'), once
И сама функция md5(string, *string), long

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

md5                  FUNCTION (pdata, phash)               ! Declare Procedure
hProvider            ULONG                                 !
hHash                ULONG                                 !
in_data              CSTRING(1024)                         !
buffer               GROUP,PRE()                           !буфер
oneb                 BYTE,DIM(1024)                        !
                     END                                   !
out_data             CSTRING(33)                           !
bhash                GROUP,PRE()                           !буфер для результата
oneb                 BYTE,DIM(16)                          !
                     END                                   !
hashsize             USHORT(16)                            !
ret_value            LONG                                  !
  CODE                                                     ! Begin processed code
    in_data = clip(pdata)
    if cryptacquirecontext(hprovider, , , PROV_RSA_FULL, 0) then
        if cryptcreatehash(hProvider, CALG_MD5, 0, 0, hHash) then
            buffer = all('<0>')
            bhash = all('<0>')
            loop i# = 1 to len(in_data)
                buffer:oneb[i#] = val(in_data[i#])
            .
            if crypthashdata(hhash, buffer, len(in_data), 0) then
                if cryptgethashparam(hhash, hp_hashval, bhash, hashsize, 0) then
                    loop i# = 1 to hashsize
                        out_data = out_data & bytetohex(bhash:oneb[i#], 1)
                    .
                    phash = out_data
                else
                    ret_value = false
                .
            else
                ret_value = false
            .
            cryptdestroyhash(hhash)
        else
            ret_value = false
        .
        cryptreleasecontext(hprovider, 0)
    else
        ret_value = false
    .    
Аватара пользователя
Губин Игорь
✯ Ветеран ✯
Сообщения: 2301
Зарегистрирован: 16 Сентябрь 2005, 16:35
Откуда: Москва
Поблагодарили: 17 раз

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

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

На сервере должен лежать архив с библиотеками (включая app с примерами) основных алгоритмов. Использую именно её, широко использую. Дописал на C к ней некоторые недостающие интерфейсы и радуюсь жизни. Если не найдёшь - пиши, пришлю архив.

От виндового криптоапи отказался от неуверенности в его наличии и настройках на любом случайном компьютере.

Была попытка вставить в проект полную реализацию шифрования на C, но компилятор CPP велосипедистов показал себя во всём "блеске" - тормоза при компиляции, тормоза при сборке, тормоза при работе. От идеи перевода кода на Clarion отказался за маразматичностью.
Это я только кажусь дураком! На самом деле я полный идиот!
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3131
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 10 раз
Поблагодарили: 28 раз
Контактная информация:

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

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

Я посмотрел, как сделано md5 в CryptoNite/OddJob/StringTheory от Capesoft - там тоже модуль на TopSpeed C, могу прислать кому надо.
С уважением, ДП
Developer
Ветеран
Сообщения: 551
Зарегистрирован: 26 Март 2012, 17:18

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

Сообщение Developer »

Привет всем!

Clarion 8.0.9759 Windows 7 SP1 Русский

Альтернатива алгоритму криптографического хеширования MD5 на Clarion ?

Интересуют рабочие готовые решения (.clw, .tpl, .lib, .c).


С Уважением, Developer, cfwdeveloper@gmail.com
С Уважением, Developer
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7329
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

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

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

Привет !

1. А чем получение SHA1 через WinAPI не устраивает ?
Работает много лет на всех Win от 2000 до 8.1 ... я код прикрепил, попробуй.
По моему все весьма тривиально.

2. Если хочешь извратится - можешь рассчитать хэш сам.
Вот пример на Clarion: http://www.pisoft.ru/verstak/kripto.htm
Вложения
SHA1.clw
(14.45 КБ) 605 скачиваний
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
Губин Игорь
✯ Ветеран ✯
Сообщения: 2301
Зарегистрирован: 16 Сентябрь 2005, 16:35
Откуда: Москва
Поблагодарили: 17 раз

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

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

Игорь Столяров писал(а):Привет !
1. А чем получение SHA1 через WinAPI не устраивает ?
Лично я так не делаю потому, что не на всех компьютерах может быть установлено CryptoAPI.
А требовать установки дредноута от Майкрософт там, где можно обойтись маленьким катерком собственной LIB, имхо, не совсем разумно.

Есть набор LIB реализующих MD5, SHA1 и SHA256 быстро и удобно. И, главное для меня: я уверен, что результат постоянен вне зависимости от очередного взбрыка мелкомягких.
Это я только кажусь дураком! На самом деле я полный идиот!
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7329
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

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

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

Губин Игорь писал(а):Лично я так не делаю потому, что не на всех компьютерах может быть установлено CryptoAPI
Не понял. Как может в Windows отсутствовать CryptoAPI ?! Можно конечно попробовать его оттуда принудительно убрать,
но тогда подозреваю, что вообще ничего работать не будет - начиная с сертификатов и заканчивая доступом к сетевым дискам.
Губин Игорь писал(а):Есть набор LIB реализующих MD5, SHA1 и SHA256 быстро и удобно. И, главное для меня: я уверен, что результат постоянен вне зависимости от очередного взбрыка мелкомягких.
Видел я эти LIB. Действительно работают. Но меня не устраивает принцип BLACKBOX. Кто-бы и что не говорил - но Microsoft весьма последователен в своей поддержке API.
А вот вероятность того, что после очередного GOLD SV Clarion чужие LIB или не прилинкуются к проекту или будут выдавать GPF при вызове - на порядок выше. Что иже и было неоднократно.
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
Губин Игорь
✯ Ветеран ✯
Сообщения: 2301
Зарегистрирован: 16 Сентябрь 2005, 16:35
Откуда: Москва
Поблагодарили: 17 раз

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

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

Игорь Столяров писал(а):Не понял. Как может в Windows отсутствовать CryptoAPI ?!
Ну не спорю, с XP может уже и есть постоянно.
Но подобная цитата с сайта Microsoft (примечание к одному из исправлений ошибок)
Приложение, которое вызывает функции API-интерфейса шифрования (CryptoAPI) может перестать отвечать на компьютере под управлением Windows XP

должна заставить задуматься. И такого там много.
НАФИГ НАФИГ. Если уж есть возможность использовать своё, то буду его использовать
Игорь Столяров писал(а):А вот вероятность того, что после очередного GOLD SV Clarion чужие LIB или не прилинкуются к проекту или будут выдавать GPF при вызове - на порядок выше. Что иже и было неоднократно.
Это будет означать уже полную задницу. Т.к. будет означать, что велосипедисты полностью отказались от поддержки стандартных LIB
Это я только кажусь дураком! На самом деле я полный идиот!
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7329
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

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

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

Губин Игорь писал(а):Это будет означать уже полную задницу. Т.к. будет означать, что велосипедисты полностью отказались от поддержки стандартных LIB
Ничего подобного. Это будет означать пофигисткий подход SV к тестированию и сборке релизов.
Не помню точно, но в каком-то релизе 7-ки у меня вдруг пошли GPF при вызове из функций из LIB, через пару патчей "исправили". При чем - молча.

Что касается сообщения по WinXP - то оно на совести того, кто оставил коммент ... я такого никогда не слышал.
Это поставило бы крест на всех системах обмена данными на основе XP, но она до сих пор считается самой надежной.

Кстати, а ты знаешь, что там внутри этих LIB ? Там может быть тот же самый вызов CryptoAPI ... завернутый в LIB. Вот и все.
За теми кто отстал - не возвращаться. (С) Кодекс
Ответить