abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    včera 05:00 | Nová verze

    Byla vydána beta verze Linux Mintu 22.3 s kódovým jménem Zena. Podrobnosti v přehledu novinek a poznámkách k vydání. Vypíchnout lze, že nástroj Systémová hlášení (System Reports) získal mnoho nových funkcí a byl přejmenován na Informace o systému (System Information). Linux Mint 22.3 bude podporován do roku 2029.

    Ladislav Hagara | Komentářů: 2
    včera 01:55 | Nová verze

    GNU Project Debugger aneb GDB byl vydán ve verzi 17.1. Podrobný přehled novinek v souboru NEWS.

    Ladislav Hagara | Komentářů: 0
    19.12. 17:22 | IT novinky

    Josef Průša oznámil zveřejnění kompletních CAD souborů rámů tiskáren Prusa CORE One a CORE One L. Nejsou vydány pod obecnou veřejnou licenci GNU ani Creative Commons ale pod novou licencí OCL neboli Open Community License. Ta nepovoluje prodávat kompletní tiskárny či remixy založené na těchto zdrojích.

    Ladislav Hagara | Komentářů: 4
    19.12. 17:00 | Komunita

    Nový CEO Mozilla Corporation Anthony Enzor-DeMeo tento týden prohlásil, že by se Firefox měl vyvinout v moderní AI prohlížeč. Po bouřlivých diskusích na redditu ujistil, že v nastavení Firefoxu bude existovat volba pro zakázání všech AI funkcí.

    Ladislav Hagara | Komentářů: 0
    19.12. 10:11 | IT novinky

    V pořadí šestou knihou autora Martina Malého, která vychází v Edici CZ.NIC, správce české národní domény, je titul Kity, bity, neurony. Kniha s podtitulem Moderní technologie pro hobby elektroniku přináší ucelený pohled na svět současných technologií a jejich praktické využití v domácích elektronických projektech. Tento knižní průvodce je ideální pro každého, kdo se chce podívat na současné trendy v oblasti hobby elektroniky, od

    … více »
    Ladislav Hagara | Komentářů: 5
    19.12. 03:11 | Komunita

    Linux Foundation zveřejnila Výroční zprávu za rok 2025 (pdf). Příjmy Linux Foundation byly 311 miliónů dolarů. Výdaje 285 miliónů dolarů. Na podporu linuxového jádra (Linux Kernel Project) šlo 8,4 miliónu dolarů. Linux Foundation podporuje téměř 1 500 open source projektů.

    Ladislav Hagara | Komentářů: 0
    19.12. 02:11 | Zajímavý článek

    Jean-Baptiste Mardelle se v příspěvku na blogu rozepsal o novinkám v nejnovější verzi 25.12.0 editoru videa Kdenlive (Wikipedie). Ke stažení také na Flathubu.

    Ladislav Hagara | Komentářů: 0
    19.12. 02:00 | Nová verze

    OpenZFS (Wikipedie), tj. implementace souborového systému ZFS pro Linux a FreeBSD, byl vydán ve verzi 2.4.0.

    Ladislav Hagara | Komentářů: 0
    19.12. 01:00 | IT novinky

    Kriminalisté z NCTEKK společně s českými i zahraničními kolegy objasnili mimořádně rozsáhlou trestnou činnost z oblasti kybernetické kriminality. V rámci operací OCTOPUS a CONNECT ukončili činnost čtyř call center na Ukrajině. V prvním případě se jednalo o podvodné investice, v případě druhém o podvodné telefonáty, při kterých se zločinci vydávali za policisty a pod legendou napadeného bankovního účtu okrádali své oběti o vysoké finanční částky.

    Ladislav Hagara | Komentářů: 8
    18.12. 14:44 | IT novinky

    Na lepší pokrytí mobilním signálem a dostupnější mobilní internet se mohou těšit cestující v Pendolinech, railjetech a InterPanterech Českých drah. Konsorcium firem ČD - Telematika a.s. a Kontron Transportation s.r.o. dokončilo instalaci 5G opakovačů mobilního signálu do jednotek Pendolino a InterPanter. Tento krok navazuje na zavedení této technologie v jednotkách Railjet z letošního jara.

    Ladislav Hagara | Komentářů: 7
    Kdo vám letos nadělí dárek?
     (28%)
     (2%)
     (12%)
     (2%)
     (2%)
     (2%)
     (12%)
     (23%)
     (16%)
    Celkem 43 hlasů
     Komentářů: 15, poslední dnes 09:50
    Rozcestník

    OpenSSL – použitie v aplikácii

    20. 10. 2009 | Rastislav Stanik | Programování | 5091×

    OpenSSL je knižnica implementujúca radu algoritmov z oblasti kryptografie. Jej súčasťou je utilita pre prikazovy riadok, ktorá umožňuje vyrobiť si vlastnú Certifikačnú Autoritu, šifrovať, podpisovať a podobne. Nedávno som ale potreboval použiť šifrovanie AES z programu, a tak som sa na OpenSSL pozrel trocha inak – a o svoje skúsenosti sa chcem s vami podeliť.

    Obsah

    Spočítanie SHA1

    link

    Ako som už spomínal, potreboval som použiť AES. Je to symetrický šifrovací algoritmus pracujúci na blokoch pevnej dĺžky. Pre jeho použitie je potrebné najprv vytvoriť šifrovací kľúč stanovenej dĺžky. Šifrované dáta samozrejme chceme chrániť heslom – ktoré ale má byť ľubovoľne dlhé. Tento rozpor môžeme jednoducho vyriešiť tým, že z užívateľom zadaného hesla spočítame hash a ten sa potom použije ako šifrovací kľúč. Ako možno viete, hashovacia funkcia je funkcia, ktorá pre ľubovoľné vstupné dáta vygeneruje blok dát pevnej dĺžky. Pritom má tú vlastnosť, že je ťažké nájsť iné vstupné dáta, pre ktoré hashovacia funkcia vrátí rovnakú hodnotu a teda aj minimálna zmena vstupných dát znamená zmenu vo výstupe hashovacej funkcie. Ako však zrátať hash? Opäť prichádza na pomoc OpenSSL. Ponúka niekoľko hashovacích algoritmov. Ja som si zvolil SHA1.

    #include <openssl/sha.h>
    …
    SHA_CTX c;
    unsigned char sha1[32];
    
    memset(sha1,0,sizeof(sha1));
    
    SHA1_Init(&c);
    SHA1_Update(&c,password,strlen(password));
    SHA1_Final(sha1,&c);

    Ako ste si možno všimli, premenná sha1 je pole 32 bajtov, ale SHA1 produkuje 160bitový hash – teda 20 bajtov. 32 potrebujeme kvôli AES, ktoré môže použiť kľúče dĺžky 128, 192 alebo 256 bitov. Ak by sme chceli počítať SHA1 z dlhších dát, môžeme volať funkciu SHA1_Update() opakovane:

    SHA1_Init(&c);
    
    while ((length=read(fd,block,sizeof(block)))>0)
    	SHA1_Update(&c,block,(unsigned long)length);
    SHA1_Final(sha1,&c);

    Šifrovanie AES

    link

    Keď už máme blok dát, ktorý môžeme použiť ako šifrovací kľúč, môžeme ho použiť pre inicializáciu AES algoritmu v OpenSSL:

    #include <openssl/aes.h>
    …
    AES_KEY encryptionKey;
    int keyBits=192;
    
    AES_set_encrypt_key(sha1,keyBits,&encryptionKey);

    Algoritmus AES (podobne ako iné blokové šifrovacie algoritmy) môže pracovať v rôznych módoch. Mód ECB je jednoduchší, pretože výsledok šifrovania bloku dát závisí len od kľúča a vstupného bloku dát. Zložitejší (a bezpečnejší) je CBC, pri ktorom výsledok šifrovania Ntého bloku závisí od výsledku šifrovania bloku predchádzajúceho. Pre situáciu, ktorú som potreboval riešiť ja, však postačoval ECB mód:

    unsigned char *inputBlock;
    unsigned char *outputBlock;
    int enc=AES_ENCRYPT; // for decryption AES_DECRYPT
    
    AES_ecb_encrypt(inputBlock, outputBlock,&encryptionKey,enc);

    Ak enc má hodnotu AES_ENCRYPT, tento kód zoberie 16 bajtov (128 bitov) plaintextu z inputBlock a umiestni zašifrovaný blok 16 bajtov na outputBlock. Ak má enc hodnotu AES_DECRYPT, tak inputBlock ukazuje na zašifrované dáta a dešifrované dáta budú uložené na outputBlock.

    Funkcia pre šifrovanie v CBC móde má trocha viac parametrov:

    void AES_cbc_encrypt(const unsigned char *in, unsigned char *out,
            const unsigned long length, const AES_KEY *key,
            unsigned char *ivec, const int enc);

    length je počet bajtov na vstupe, ivec je „inicializačný vektor“, ktorým sa prenáša informácia medzi jednotlivými blokmi.

    Problémom pri použití blokovej šifry je zistenie, koľko bajtov vlastne má mať výstup. Na výstupe totiž dostaneme vždy násobok veľkosti AES bloku – 16 bajtov. Riešenie je v použití „zarovnania“ – angl. padding. To sa spravidla implementuje tak, ako to predpisuje PKCS#5. Teda tak, že bajty, ktoré chýbajú v poslednom bloku, sa vyplnia hodnotou určujúcou, koľko bajtov treba odobrať od konca dešifrovaných dát tak, aby sme dostali správnu dĺžku. Ak napríklad potrebujem zašifrovať 25 bajtov dát, tak nájdeme najbližší násobok 16 (veľkosť AES bloku) – to je 32. Bajty od 26 po 32 pred zašifrovaním vyplníme hodnotou 7 (teda 32-25). Po rozšifrovaní potom stačí zobrať posledný bajt a podľa neho vieme, koľko bajtov bolo použitých pre padding. Ak na vstupe už máme násobok veľkosti bloku, umelo doplníme na vstupe jeden blok obsahujúci len padding.

    BIO

    link

    Pri prehrabávaní sa v OpenSSL som narazil na ďalší kus funkcionality, ktorý sa mi hodil. Chcel som výsledok šifrovania zapísať do textovej formy, ktorú možno prenášať ako tlačiteľný text. V praxi sa na tento účel používa kódovanie BASE-64. Po krátkom pátraní som prišiel na to, že existujú prinajmenšom dve kódovania BASE-64. Jedno ponúka libc vo funkciách a64l()l64a() – zodpovedajú POSIX-u, ale všetci používajú MIME-BASE 64, ktoré používa inú sadu znakov. A práve tento druhý variant ponúka OpenSSL.

    Okrem hashovacích a šifrovacích funkcií OpenSSL obsahuje aj knižnicu nazvanú BIO – čo je abstrakcia sady vstupných a výstupných funkcií. Ide vlastne o sadu metód, ktoré fungujú ako čierna skrinka. Možno do nich na jednej strane zapisovať a na druhej strane čítať. Jednou takouto metódou je „mem“. Vyrobí ju funkcia BIO_s_mem() a do všeobecného rozhrania ju obalí BIO_new():

    #include <openssl/bio.h>
    #include <openssl/evp.h>
    …
    BIO bio=*BIO_new(BIO_s_mem());

    Na takto získanú premennú je možné použiť BIO_write()BIO_read():

    int BIO_read(BIO *b, void *buf, int len);
    int BIO_write(BIO *b, const void *buf, int len);

    Metóda „mem“ má tú vlastnosť, že tie isté dáta, ktoré do nej zapíšeme, z nej aj prečítame. Ďalšou metódou je napr. tá, ktorú vracia funkcia BIO_f_base64(). Má tú vlastnosť, že to, čo do nej zapíšeme, si táto metóda ukladá v kódovaní MIME-BASE64 a to, čo z nej prečítame, je zasa spätne dekódované. Dve metódy možno zreťaziť použitím funkcie BIO_push():

    BIO *mem=BIO_new(BIO_s_mem());
    BIO *b64=BIO_new(BIO_f_base64());
    BIO *bio=BIO_push(b64,mem);

    Pri takomto zreťazení dáta zapísané do bio môžeme prečítať z mem a dostaneme MIME-BASE64 zakódované dáta. Naopak MIME-BASE64 kódované dáta zapísané do mem môžeme prečítať z bio a dostaneme pôvodná dáta. Uvoľnenie dát spojených so štruktúrou BIO robí funkcia BIO_free(). Pokiaľ boli viaceré BIO štruktúry zreťazené, uvoľní ich naraz BIO_free_all(). Chovanie týchto stavebných blokov môžeme ovplyvniť napr. nastavením flagov funkciou BIO_set_flags(). Napr. volanie

    BIO_set_flags(b64,BIO_FLAGS_BASE64_NO_NL);

    zariadi, že text generovaný takouto metódou nebude automaticky ukončený znakom nového riadku. Okrem „mem“ a „base64“ existujú rôzne ďalšie BIO metódy, ktoré napr. vedia zo vstupných dát zrátať SHA1 alebo MD5, nastaviť ako vstup (alebo výstup) súbor či socket, šifrovať ich atď. Napr. nasledujúci kúsok kódu číta MIME-Base64 kódované dáta a tlačí na štandardný výstup pôvodné nekódované dáta:

    BIO *fl=BIO_new_file("inputfile.dat","r");
    BIO *b64=BIO_new(BIO_f_base64());
    BIO *bio=BIO_push(b64,fl);
    	
    char ch;
    while (BIO_read(b64,&ch,1)>0)
    	printf("%c",ch);
    BIO_free_all(bio);

    A tento vypíše SHA1 vstupného buffra:

    char sha1[20];
    memset(sha1,0,sizeof(sha1));
    
    BIO *sha1bio=BIO_new(BIO_f_md());
    BIO_set_md(sha1bio,EVP_sha1());
    /* to discard the written data after calculating SHA1: */
    BIO_push(sha1bio,BIO_new(BIO_s_null()));
    
    BIO_write(sha1bio,buffer,bufferLength); /* can be called several times */
    BIO_flush(sha1bio);
    BIO_gets(sha1bio,sha1,sizeof(sha1));
    
    for (i=0;i<sizeof(sha1);i++)
    	printf("%02x",sha1[i]&0xff);
    printf("\n");

    OpenSSL je rozsiahla knižnica a my sme sa len dotkli niektorých tém. Ale dúfam, že vás zaujali.

    Šifrovanie s dĺžkou kľúča 192 alebo 256 bitov môže podliehať exportným obmedzeniam.        

    Hodnocení: 100 %

            špatnédobré        

    Nástroje: Tisk bez diskuse

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    Komentáře

    Vložit další komentář

    20.10.2009 07:18 Martin | skóre: 10 | blog: Nádraží Perdido
    Rozbalit Rozbalit vše Re: OpenSSL – použitie v aplikácii
    Díky za článek. Vždy uvítám předžvýkání nějaké zajímavé nebo užitečné problematiky, jsem totiž většinou líný se prohrábávat dokumentací ke knihovnám. :-)
    20.10.2009 09:43 maertien(not logged in)
    Rozbalit Rozbalit vše Re: OpenSSL – použitie v aplikácii
    Diky za pekne osvetleni problematiky. Takoveto rychle uvody jsou nejlepsi inspiraci pro dalsi studium. fakt thx :-)
    20.10.2009 12:02 azurIt | skóre: 34 | blog: zatial_bez_mena
    Rozbalit Rozbalit vše Re: OpenSSL – použitie v aplikácii
    "Jej súčasťou je utilita pre prikazovu riadku, ktorá ..."

    slovo 'riadok' je muzskeho rodu ;)
    20.10.2009 14:45 Omyl
    Rozbalit Rozbalit vše Re: OpenSSL – použitie v aplikácii
    ;) ale utilita (krásné české/slovenské slovo) je rodu ženského....
    20.10.2009 17:32 moo
    Rozbalit Rozbalit vše Re: OpenSSL – použitie v aplikácii
    to nemeni nic na fakte, ze ono sklonovanie skutocne nie je spravne
    20.10.2009 20:09 Robert Krátký | skóre: 94 | blog: Robertův bloček
    Rozbalit Rozbalit vše Re: OpenSSL – použitie v aplikácii
    Ve slovenštině se, podobně jako v češtině, nedá používat 'riadok' i 'riadka'?
    20.10.2009 20:46 azurIt | skóre: 34 | blog: zatial_bez_mena
    Rozbalit Rozbalit vše Re: OpenSSL – použitie v aplikácii
    nie neda, 'riadok' je vzdy muz. ta chyba vyzera velmi smiesne, odporucam opravit.
    20.10.2009 21:16 snehuliak
    Rozbalit Rozbalit vše Re: OpenSSL – použitie v aplikácii
    nominativ: riadok, genitiv: riadka cize "prikazovy riadok", nie "prikazova riadka" http://www.slex.sk/index.asp
    Grunt avatar 20.10.2009 12:46 Grunt | skóre: 23 | blog: Expresivní zabručení | Lanžhot
    Rozbalit Rozbalit vše Re: OpenSSL – použitie v aplikácii
    Ještě mohlo být napsáno něco k jeho cross-kompilaci. To je fakt lahůdka. Určitě doporučuju si pochuťiť.
    Na co 64-bitů když to jde i s jedním? | 80.78.148.5 | Hack (for) free or Die Hard!
    Jardík avatar 20.10.2009 14:48 Jardík | skóre: 40 | blog: jarda_bloguje
    Rozbalit Rozbalit vše Re: OpenSSL – použitie v aplikácii
    SHA1_Init(&c);
    SHA1_Update(&c,password,(unsigned long)strlen(password));
    SHA1_Final(sha1,&c);
    
    Už ani nemá cenu číst dál, protože v článku je jasně naznačen špatný způsob programování.

    strlen totiž vrací size_t a né unsigned long a nelze spoléhat na to, že size_t je stejně velký jako unsigned long. Pokud SHA1_Update opravdu chce unsigned long jako argument znamenající velikost bufferu, pak je to špatně navržená funkce.
    Věřím v jednoho Boha.
    20.10.2009 15:11 Andrej Herceg | skóre: 43
    Rozbalit Rozbalit vše Re: OpenSSL – použitie v aplikácii
    Deklarácia tej funkcie je
    int SHA1_Update(SHA_CTX *c, const void *data, size_t len);
    (teda aspoň v sha.h, v nápovede je stále unsigned long)
    Jardík avatar 20.10.2009 16:05 Jardík | skóre: 40 | blog: jarda_bloguje
    Rozbalit Rozbalit vše Re: OpenSSL – použitie v aplikácii
    Tak by si to mohl autor článku opravit. A pokud to tedy je v nápovědě tak pomrveno, tak mu budiž odpuštěno :-)
    Věřím v jednoho Boha.
    20.10.2009 16:49 rastos | skóre: 63 | blog: rastos
    Rozbalit Rozbalit vše Re: OpenSSL – použitie v aplikácii
    Autor už nie ;-) To musí Robert. Skutočne v man stránke je unsigned long a v headri je size_t. To pretypovanie by tam nemalo byť.
    20.10.2009 15:37 Zdenek Kotala
    Rozbalit Rozbalit vše Re: OpenSSL – použitie v aplikácii
    Ono s rozhranim Openssl je problem. Bylo navrzeno dost nestastne a neni konzistentni. Nektere funkce napriklad nevraci chybu a podobne. Lepsi je pouzivat modernejsi EVP interface. Kazdopadne pokud nekdo zacina psat neco od nuly, je vhodne se poohlednout jinde. Napriklad PKCS11 je velice dobre definovany standard.
    20.10.2009 14:59 Michal Vyskočil | skóre: 60 | blog: miblog | Praha
    Rozbalit Rozbalit vše Re: OpenSSL – použitie v aplikácii
    Při psaní nové aplikace bych zvážil používat spíše Mozilla NSS. Například lidé z Fedory docela dlouho pracují na tom, aby to byla jediná crypto knihovna v jejich distribuci. Jednak toho zvládá nejvíc a
    When your hammer is C++, everything begins to look like a thumb.
    20.10.2009 15:47 Zdenek Kotala
    Rozbalit Rozbalit vše Re: OpenSSL – použitie v aplikácii
    Souhlasim s tim, ze je treba se poohlednout jinde. Kazdopadne, ale pri vyberu je treba brat ohled na portabilitu. NSS obsahuje podporu spousty standardu. Takze spis jde o to vybrat ten standard, ktery je podporovan na nejvice platformach. Napriklad Solaris ma velice promakanou podporu na PKCS11 a to vcetne vazby na crypto HW a pro PKCS11 je podpora i v Jave. Obecne PKCS11 je hodne podporovany a existuje k nemu poradna dokumentace narozdil od OpenSSL.
    20.10.2009 19:04 [exa]
    Rozbalit Rozbalit vše Re: OpenSSL – použitie v aplikácii
    Asi ti neco uniklo. PKCS#11 je standard a OpenSSL stejne jako NSS je knihovna ktera presne tenhle standard implementuje, spolecne s kupou jinych standartu; protoze samotne PKCS#11 jen diktuje jak se starat o klice a certifikaty, a bez ostatnich standartu by nam bylo celkem k nicemu, ze ano.
    21.10.2009 11:06 Zdenek Kotala
    Rozbalit Rozbalit vše Re: OpenSSL – použitie v aplikácii
    PKCS11 diktuje mnohem vice nez jak se starat o klice. Ma i sifrovaci funkce, digesty a podobne. Takze muze a take funguje naprosto samostatne. Viz specifikace. A je jen otazkou toho co se podstrci linkeru, ale API bude stejne.
    23.10.2009 03:25 kuly
    Rozbalit Rozbalit vše Re: OpenSSL – použitie v aplikácii
    Zkratka neni duvod nepouzit OpenSSL, proc tolik reci? :-)
    20.10.2009 16:08 Filip Jirsák | skóre: 67 | blog: Fa & Bi
    Rozbalit Rozbalit vše Re: OpenSSL – použitie v aplikácii
    A?
    20.10.2009 16:15 Michal Vyskočil | skóre: 60 | blog: miblog | Praha
    Rozbalit Rozbalit vše Re: OpenSSL – použitie v aplikácii
    ... a pro někoho může být zajímavá podpora FIPS 140-2.

    Nějak mi to vypadlo, naštěstí je to v odkazovaném dokumentu.
    When your hammer is C++, everything begins to look like a thumb.
    20.10.2009 16:21 Andrej Herceg | skóre: 43
    Rozbalit Rozbalit vše Re: OpenSSL – použitie v aplikácii
    Pracuje sa aj na tom, aby tá knižnica bola rýchlejšia? Napr. nedávno prerábal Linus sha1 funkciu v git a uverejnil aj porovnanie rýchlostí a tá funkcia je v knižnici OpenSSL oveľa rýchlejšia.
    20.10.2009 16:43 wake
    Rozbalit Rozbalit vše Re: OpenSSL – použitie v aplikácii
    promenna sha je pole 32 znaku. ne vsude je znak bajtovy.
    20.10.2009 18:41 Filip Jirsák | skóre: 67 | blog: Fa & Bi
    Rozbalit Rozbalit vše Re: OpenSSL – použitie v aplikácii
    Výstup SHA jsou bajty, ne znaky.
    23.10.2009 03:30 kuly
    Rozbalit Rozbalit vše Re: OpenSSL – použitie v aplikácii
    Ale ta promena je definovana jako 32 charu a pak popsana jako 32 bajtu. A na tento nesoulad wake upozornil. Fildo, Fildo, ...
    Jiří Svoboda avatar 23.10.2009 07:41 Jiří Svoboda | skóre: 37 | blog: cat /dev/mind | Prostějov
    Rozbalit Rozbalit vše Re: OpenSSL – použitie v aplikácii
    Ale to je správně, to je Céčko.
    23.10.2009 12:49 Filip Jirsák | skóre: 67 | blog: Fa & Bi
    Rozbalit Rozbalit vše Re: OpenSSL – použitie v aplikácii
    Jak se v C jmenuje datový typ "8bitové číslo"?
    20.10.2009 18:25 [exa]
    Rozbalit Rozbalit vše Re: OpenSSL – použitie v aplikácii
    Trochu me mrzi ze se tak casto zapomina na GnuTLS a libgcrypt, prijdou mi na pouziti asi stokrat jednodussi nez OpenSSL. Nic proti, proste mi gnu nastroj sednul mnohem lip, navic me netizi licencni bordel a hrozna dokumentace, a spatlanina nesouvisejicich funkci (sifrovaci rutiny + BlockIO + TLS/SSL protokol ) v jedny knihovne :)

    jinak teda abych byl konstruktivni a jen neremcal, podobny priklad na SHA1 using "GNU Way":
    
    #include "gcrypt.h"  //...etc..
    
    gcry_md_hd_t digest=0;
    int num;
    char buffer[4096];
    FILE*instream=fopen("foo","rb");
    
    gcry_md_open(&digest,GCRY_MD_SHA1,0);
    while ((num = fread(buffer, 1, 4096, instream)) != 0)
        gcry_md_write (digest, buffer, num);
    
    char * result = gcry_md_read (digest,0);
    
    for(num=0; gcry_md_get_algo_dlen (GCRY_MD_SHA1) > num ; ++num)
        printf ("%02x",result[num]);
    printf ("\n");
    gcry_md_close (digest);
    
    
    a nekamenujte me jestli vam to nepude skompilit napoprvy, psal sem to skoro zpameti.
    23.10.2009 03:33 kuly
    Rozbalit Rozbalit vše Re: OpenSSL – použitie v aplikácii
    a spatlanina nesouvisejicich funkci Ale ony spolu dost uzce souvisi.

    Založit nové vláknoNahoru

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.