Форум » [x]Harbour » Аналоги функции HB_Crypt и HB_Decrypt для Harbour'а ? » Ответить

Аналоги функции HB_Crypt и HB_Decrypt для Harbour'а ?

Andrey: Всем привет. Подскажите пожалуйста, есть ли в Харборе фунции как в хХарборе HB_Crypt и HB_Decrypt ?

Ответов - 34, стр: 1 2 All

alkresin: В Харборе есть функции, реализующие разные алгоритмы шифрации: HB_BLOWFISHDECRYPT - Blowfish - популярный криптостойкий алгоритм HB_BLOWFISHENCRYPT HB_MD5DECRYPT - Md5, ничего про него не знаю HB_MD5ENCRYPT SX_DECRYPT - из библиотеки hbsix, наверное, самый простой SX_ENCRYPT

Dima: Andrey [pre2] 2008-06-10 16:06 UTC+0100 Viktor Szakats (harbour.01 syenar.hu) + contrib/xhb/hbcrypt.c + contrib/xhb/hbnxs.h * contrib/xhb/Makefile * contrib/xhb/common.mak + Added HB_CRYPT()/HB_DECRYPT(). Thanks to Giancarlo Niccolai / xhb. + Changed to not depend on hbzlib. ; Minor modifications to compile smoothly in Harbour. [1.0.0RC1] [/pre2]

Andrey: Спасибо БОЛЬШОЕ ! Я искал через Far в папке "Harbour SVN 30" строку "crypt" по маске *.prg - из-за этого и не нашел ничего. Неправильно искал... Интересно, я еще по доке Харбора искал такую строку, тоже ничего нет.


Dima: Andrey я искал в ChangeLog

Andrey: Использую в хХарборе 1.2.3 функцию CRYPT(cStr, cPass) - осталось еще с клипера. Сделал новую прогу на МиниГуи (соответственно последний Харбор) и пытаюсь прочитать базы с хХарбора. Функция CRYPT() в Харборе дает другое значение ! Вопрос: как можно сделать работу функций одинаковой ? Т.е. отказ от CRYPT и переход на одинаковую функцию в Харборе и хХарборе.

Dima: Andrey Это твоя самописная функция ?

Andrey: Dima пишет: Это твоя самописная функция ? Стандартная клиперовская. Работает и в Харборе и хХарборе.

Dima: HB_Crypt не пробовал ?

Dima: Упс , это мы говорим про CRYPT из CT ? Значит надо проверить что выдаст тестовый пример в Clipper , Harbour , Xharbour Проверил. Сlipper и Harbour дают разные результаты

Andrey: Dima пишет: Harbour , Xharbour CRYPT из CT - различается для них !

Dima: Andrey Андрей а если бы кроме Harbour , Xharbour были бы YHarbour и ZHarbour ты бы и на них писал ? Остановись уже на каком то одном. Иначе будешь постоянно находить не стыковки.

Andrey: Dima пишет: Остановись уже на каком то одном. Иначе будешь постоянно находить не стыковки. Дима, штук 10 задач переделал на хХарбор уже давно. Года 2 пытаюсь перейти на МиниГуи. Переделать сразу ВСЁ на Харбор просто нереально. Делаю мелкими шагами. Самый главный шаг это TBROWSE, пока не получается. Сделал пока новое меню на МиниГуи. Открываю базу паролей задач на хХарборе. Споткнулся на функции CRYPT(). Вот из-за этого и спрашиваю, кто знает ОДИНАКОВЫЕ функции (такого класса) для Харбора и хХарбора ?

SergKis: Andrey в MiniGui есть: h_crypt.prg и там (может пойдет): [pre2] FUNCTION _ENCRYPT(cStr, cPass) LOCAL cXorStr := CHARXOR( cStr, "<ORIGINAL>" ) IF !EMPTY(cPass) cXorStr := CHARXOR( cXorStr, cPass ) ENDIF RETURN cXorStr FUNCTION _DECRYPT(cStr, cPass) LOCAL cXorStr := CHARXOR( cStr, cPass ) RETURN CHARXOR( cXorStr, "<ORIGINAL>" ) [/pre2]

SergKis: Andrey еще в hb_six.lib есть SX_DECRYPT(cStr, cPas), SX_ENCRYPT(cStr, cPas)

Andrey: SergKis пишет: CHARXOR( cXorStr, cPass ) А эта функция одинаково работает в Харборе и хХарборе ?

SergKis: Andrey проверь. хХарбора не использую

Dima: Andrey пишет: А эта функция одинаково работает в Харборе и хХарборе ? Проверил. Одинаково в Clipper и Harbour. Xharbour нет у меня но думаю так же будет.

Andrey: Функции HB_Crypt и HB_Decrypt работают в Харборе 3.2.0dev (r1405231501) и хХарборе 1.2.3 - одинаково ! Проверил...

Dazzler: Подскажите пожалуйста параметры функций: HB_BLOWFISHDECRYPT() HB_BLOWFISHENCRYPT()

Dima: Dazzler hb_blowfishKey( <cPass> ) -> <bfKey> hb_blowfishEncrypt( <bfKey>, <cData> ) -> <cCryptedData> hb_blowfishDecrypt( <bfKey>, <cCryptedData> ) -> <cData>

Dazzler: Dima пишет: hb_blowfishKey( <cPass> ) -> <bfKey> hb_blowfishEncrypt( <bfKey>, <cData> ) -> <cCryptedData> hb_blowfishDecrypt( <bfKey>, <cCryptedData> ) -> <cData> Спасибо!

santy: Небольшие примеры использования данных функций: в xHarbour: [pre2] /* * Test program for blowfish routines */ #include "common.ch" PROCEDURE MAIN() LOCAL cData := "Harbour Power" LOCAL cKey := hb_blowfishKey( "password" ) LOCAL cCrypted := hb_blowfishEncrypt( cKey, cData ) LOCAL cDecrypted ? cCrypted ? cDecrypted := hb_blowfishDecrypt( cKey, cCrypted ) ? cDecrypted == cData ? LEN( cDecrypted ) == LEN( cData ) RETURN [/pre2] Пример от Пшемека для harbour: [pre2] proc main() local cText, cEncrypted, cDecrypted, cPass, bfKey cText := "This is my secret message." cPass := "Top Secret ;-)" bfKey := hb_blowfishKey( cPass ) /* encrypt data */ cEncrypted := hb_blowfishEncrypt( bfKey, cText ) /* dencrypt data */ cDecrypted := hb_blowfishDecrypt( bfKey, cEncrypted ) ? "plain text:", hb_strToExp( cText ) RETURN nil [/pre2]

Andrey: Всем привет. Есть ли для харбора готовые функции для алгоритма RSA ?

Dima: Andrey Смотри примеры в HBSSL

Andrey: Dima пишет: Смотри примеры в HBSSL Посмотрел... Как запустить то ? Совсем забыл как собирать... И как перетащить на МиниГуи ?

Dima: Andrey пишет: И как перетащить на МиниГуи ? КаГ бы ни чего перетаскивать и не нужно , так как: [pre2] * Updated: Harbour Compiler 3.2.0dev (r2014-01-21 20:41): * New: added HbSSL wrapper library and OpenSSL corresponding libraries. [/pre2]

alkresin: Может, я что-то упустил, но в hbssl нет всех нужных функций для RSA. Полгода назад я написал небольшой набор - обертки для RSA_public_encrypt(), RSA_private_decrypt() и пр., но применить на практике не было случая.

Andrey: alkresin пишет: Может, я что-то упустил, но в hbssl нет всех нужных функций для RSA. Мне нужны функции для работы со строками. alkresin пишет: Полгода назад я написал небольшой набор - обертки для RSA_public_encrypt(), RSA_private_decrypt() и пр., но применить на практике не было случая. А можете выложить ? Попробуем на практике...

Dima: Andrey пишет: Есть ли для харбора готовые функции для алгоритма RSA ? А если реально , то для чего это тебе нужно ?

alkresin: Вот минимально необходимый набор функций: #include "hbapi.h" #include "hbapiitm.h" #include "hbapierr.h" #include <openssl/evp.h> #include <openssl/ssl.h> #include <openssl/rand.h> static int padding = RSA_PKCS1_PADDING; static RSA * createRSA( unsigned char * skey, int iPublic ) { RSA * rsa = NULL; BIO * bio = BIO_new_mem_buf( skey, -1 ); if( !bio ) return 0; if( iPublic ) rsa = PEM_read_bio_RSA_PUBKEY( bio, &rsa,NULL, NULL ); else rsa = PEM_read_bio_RSAPrivateKey( bio, &rsa,NULL, NULL ); BIO_free( bio ); return rsa; } HB_FUNC( OSSL_RSA_PUBLIC_ENCRYPT ) { RSA * rsa = createRSA( (unsigned char *) hb_parc(2), 1 ); const unsigned char * data = (const unsigned char *) hb_parc( 1 ); unsigned char sEncrypted[4098]; int nResult; nResult = RSA_public_encrypt( hb_parclen(1), data, sEncrypted, rsa, padding ); if( nResult == -1 ) hb_ret(); else { hb_retclen( (const char *) sEncrypted, nResult ); } RSA_free( rsa ); } HB_FUNC( OSSL_RSA_PRIVATE_DECRYPT ) { RSA * rsa = createRSA( (unsigned char *) hb_parc(2), 0 ); const unsigned char * data = (const unsigned char *) hb_parc( 1 ); unsigned char sDecrypted[4098]; int nResult; nResult = RSA_private_decrypt( hb_parclen(1), data, sDecrypted, rsa, padding ); if( nResult == -1 ) hb_ret(); else { hb_retclen( (const char *) sDecrypted, nResult ); } RSA_free( rsa ); } Для работы нужны libeay32.dll, ssleay32.dll, для сборки программы, соответственно, liblibeay32.a и libssleay32.a - собирать желательно с Mingw. Сгенерировать ключи можно самой openssl.exe. Сначала личный: openssl genrsa -out private.pem 2048 а потом из него публичный: openssl rsa -in private.pem -outform PEM -pubout -out public.pem Публичный отдаете, например, мне - и я теперь могу пересылать вам зашифрованные строки: cOriginal := "Some secret text" cCrypted := OSSL_RSA_PUBLIC_ENCRYPT( cOriginal, Memoread("public.pem") ) а вы - их расшифровывать: cOriginal := OSSL_RSA_PRIVATE_DECRYPT( cCrypted, Memoread("private.pem") )

Andrey: alkresin пишет: Вот минимально необходимый набор функций: Спасибо большое ! Буду пробовать...

Sergy: сорри, что вмешиваюсь. Dima пишет: А если реально , то для чего это тебе нужно ? RSA - один из алгоритмов АССИМЕТРИЧНОГО шифрования. Предназначен для обмена данными по открытым каналам. Основа протокола https:// Правда недавно стало известно, что и это не панацея. Его хакнули. Но это уже офф. Вкратце - есть Петя, он дает двум своим друзьям - Васе и Коле ПУБЛИЧНЫЙ ключ, при помощи которого они шифруют свои сообщениx и отсылают их Пете. При этом - ни Вася, ни Коля не могут расшифровать сообщения друг друга. Они не могут расшифровать даже свои собственные сообщения, тк для их расшифровки у Пети есть ПРИВАТНЫЙ ключ, который он НИКОМУ НЕ ДАЕТ. Т.е. зашифровка происходит с одним ключом, а расшифровка - с другим.

Dima: Sergy пишет: Его хакнули. Но это уже офф.

Sergy: Если интересно, тогда уточню: хакнули не сам RSA (он довольно устойчив), а протокол обмена ключами, на котором построен https и прочие PGP. Суть вкратце такая: На канал связи между Петей и его друзьями садится некто, пусть ОЛЕГ. В тот момент, когда Петя посылает публичный ключ своим друзьям, Олег сохраняет его и посылает Васе и Коле свой собственный публичный ключ. Вася и Коля, шифруя свои сообщения подмененным ключом, не знают об этом и Олег (сидящий на линии), расшифровывает их сообщения своим приватным ключом, спокойно читает их, при необходимости корректирует и отсылает их Пете, шифруя их уже Петиным публичным ключом. Все трое счастливы, но Олег счастливее всех троих вместе взятых. Атака называется man-in-the-middle, борьбой с ней является передача публичного ключа по защищенным каналам связи. Как раз теряется то преимущество, которое завялено как основное в алгоритмах ассиметричного шифрования. Банки с недавних пор делают это только на бумаге, требуя личного присутствия фин.директора организации. Из недавнего: https://www.searchengines.ru/sert-ssl.html



полная версия страницы