Страница 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. Вот и все.