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

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

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

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

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



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