Portál AbcLinuxu, 5. května 2025 06:17
pochuťiť.
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.
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)
sha
je pole 32 znaku. ne vsude je znak bajtovy.
#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.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.