Страница 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
				
Спасибо огромное, Дружище!
Но я уже сам реализовал через 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. Вот и все.