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

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

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

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

md5('123') = '202cb962ac59075b964b07152d234b70'

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

Добавлено: 10 Сентябрь 2013, 14:14
seawolf
поищи по форуму. Как сейчас помню кто-то выкладывал на сях текст и весь проект собирался на кларионе без проблем.

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

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

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

md5('123') = '202cb962ac59075b964b07152d234b70'
Если память не изменяет, есть модуль на си от Александра Струменского в составе библиотеки отправки почты по smtp. Глянь в файловом архиве, там все в сырцах должно лежать.

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

Добавлено: 10 Сентябрь 2013, 16:27
kreator
Есть ещё класс Messaging от SV. Там достаточно всё просто. Есть метод шифрования строки, есть метод дешифрования строки.

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

Добавлено: 11 Сентябрь 2013, 16:35
IKSoft
попробуйте
это я для себя сделал
проблем не было
с исходниками

http://www.aniva-ltd.ru/bin/ik_md5.zip

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

Добавлено: 11 Сентябрь 2013, 17:56
mike_ch
IKSoft писал(а):попробуйте
это я для себя сделал
проблем не было
с исходниками

http://www.aniva-ltd.ru/bin/ik_md5.zip
Спасибо огромное, Дружище!
Но я уже сам реализовал через CryptAPI. Если будет интересно - завтра опишу как. Сегодня уже времени нет.

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

Добавлено: 11 Сентябрь 2013, 22:52
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
    .    

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

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

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

Была попытка вставить в проект полную реализацию шифрования на C, но компилятор CPP велосипедистов показал себя во всём "блеске" - тормоза при компиляции, тормоза при сборке, тормоза при работе. От идеи перевода кода на Clarion отказался за маразматичностью.

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

Добавлено: 13 Сентябрь 2013, 13:09
Дед Пахом
Я посмотрел, как сделано md5 в CryptoNite/OddJob/StringTheory от Capesoft - там тоже модуль на TopSpeed C, могу прислать кому надо.

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

Добавлено: 07 Февраль 2014, 3:20
Developer
Привет всем!

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

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

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


С Уважением, Developer, cfwdeveloper@gmail.com

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

Добавлено: 10 Февраль 2014, 12:39
Игорь Столяров
Привет !

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

2. Если хочешь извратится - можешь рассчитать хэш сам.
Вот пример на Clarion: http://www.pisoft.ru/verstak/kripto.htm

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

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

Есть набор LIB реализующих MD5, SHA1 и SHA256 быстро и удобно. И, главное для меня: я уверен, что результат постоянен вне зависимости от очередного взбрыка мелкомягких.

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

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

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

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

должна заставить задуматься. И такого там много.
НАФИГ НАФИГ. Если уж есть возможность использовать своё, то буду его использовать
Игорь Столяров писал(а):А вот вероятность того, что после очередного GOLD SV Clarion чужие LIB или не прилинкуются к проекту или будут выдавать GPF при вызове - на порядок выше. Что иже и было неоднократно.
Это будет означать уже полную задницу. Т.к. будет означать, что велосипедисты полностью отказались от поддержки стандартных LIB

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

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

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

Кстати, а ты знаешь, что там внутри этих LIB ? Там может быть тот же самый вызов CryptoAPI ... завернутый в LIB. Вот и все.