Existuje glibc hashovací funkce?

hlasů
9

Dívám se dělat realizace stolní vlastního hash v C. Je tam hashovací funkce MD5 / SHA1 již v knihovně GNU nebo musím použít externí knihovnu na to?

Tady je trochu to, co jsem hledal:

int hashValue;

hashValue = MD5_HASH(valToHash);
Položena 14/10/2010 v 19:01
zdroj uživatelem
V jiných jazycích...                            


8 odpovědí

hlasů
5

Můžete se podívat na průzkum a analýzu mnoha hashovací funkce Bob Jenkin je:

Nebo jen kapka jeho lookup3 rutiny (které on dal do public domain) do projektu:

Odpovězeno 15/10/2010 v 02:08
zdroj uživatelem

hlasů
4

Pro tabulky hash, nemusíte kryptografický sílu, tak dobré randomization vlastnosti. Rozbité kryptografické hashovací funkce (jako je MD5) jsou vhodné pro to, ale budete chtít používat MD4 , který je zároveň rychlejší a jednodušší, do té míry, že by se dalo jednoduše zahrnovat implementaci přímo v kódu. Není těžké ji přepsat ze specifikace (a protože chcete pouze funkci pro hašovací tabulce, není to problém, pokud jste si to špatně na nějakém místě). Nestyda konektor: je optimalizovaná implementace C MD4 v sphlib .

Odpovězeno 15/10/2010 v 01:24
zdroj uživatelem

hlasů
3

Pokud již máte dobrý důvod pro použití MD5, možná budete chtít, aby přehodnotila. Co dělá pro „dobré“ hashovací funkce v hash tabulky je velmi závislá na tom, co se snažíte dosáhnout. Možná budete chtít přečíst komentáře v Python to dictobject.cvidět na nejrůznější kompromisy ostatní udělali.

Odpovězeno 14/10/2010 v 19:08
zdroj uživatelem

hlasů
3

Existuje několik důvěryhodné, jednoduchá verze jsou k dispozici - Mám málo pramenů digest pro výzkum . Zde je to, co jsem napsal v souboru POPIS:

Popis: Balík Digest funkce pro vytvoření hash `‘ štěpením libovolných objektů R pomocí MD5, SHA-1, SHA-256 a CRC32 algoritmy umožňující snadné porovnání R jazykových objektů. MD5 algoritmus Ron Rivest je uveden v RFC 1321, algoritmy SHA-1 a SHA-256 jsou uvedeny v FIPS 180-1 a FIPS 180-2, a algoritmus CRC32 je popsáno v
ftp: //ftp.rocksoft com / cliens / rocksoft / doklady / crc_v3.txt . Pro MD5, SHA-1 a SHA-256, tento balíčky používá malé implementace samostatné, které poskytl Christophe Devine. Pro CRC32, se používá kód z knihovny zlib.

Myslím, že někteří z Christophe v kódu již není v cr0.net, ale vyhledávání by vám mělo vést k několika dalších projektů začleněním. Jeho soubor hlavičky byly docela jasné:

/*                                                   
 * FIPS-180-1 compliant SHA-1 implementation,   
 * by Christophe Devine <devine@cr0.net>;   
 * this program is licensed under the GPL.  
 */     

a jeho kód shoduje s referenčním výstup.

Odpovězeno 14/10/2010 v 19:02
zdroj uživatelem

hlasů
2

gcrypt a openssl může dělat MD5, SHA a další hash Zde je příklad s libgcrypt:

#include <gcrypt.h>
#include <stdio.h>

//  compile  gcc  md5_test.c  -lgcrypt

int main(int argc, char *argv[])
{
        unsigned char digest[16];
        char digest_ascii[32+1] = {0,};
        int digest_length = gcry_md_get_algo_dlen (GCRY_MD_MD5);
        int i;
        printf("hashing=%s len=%d\n", argv[1], digest_length);
        gcry_md_hash_buffer(GCRY_MD_MD5, digest, argv[1], strlen(argv[1]));

        for (i=0; i < digest_length; i++) {
                sprintf(digest_ascii+(i*2), "%02x", digest[i]);
        }
        printf("hash=%s\n", digest_ascii);
}

`

Odpovězeno 07/11/2013 v 10:28
zdroj uživatelem

hlasů
2

Knihovna OpenSSL má všechny šifrovací rutiny jste si kdy chcete, včetně kryptografických hash.

Odpovězeno 14/10/2010 v 20:08
zdroj uživatelem

hlasů
2

Glibc se crypt()používá algorhytm MD5 založené pokud sůl začíná $ 1 $. Ale protože jste zmínil, že budete dělat implementací hash tabulky, možná Jenkins hash by bylo náležité.

Odpovězeno 14/10/2010 v 19:15
zdroj uživatelem

hlasů
0

Murmur3 je rychlý noncryptographic algoritmus, který můžete použít.

Dobrý rychlost komparace šelestu proti jiným algoritmy lze nalézt v tomto vlákně https://softwareengineering.stackexchange.com/questions/49550/which-hashing-algorithm-is-best-for-uniqueness-and-speed

Jeden možný způsob implementace: https://github.com/PeterScott/murmur3

Příklad:

uint32_t hash;
uint32_t seed = 42;
char* input = "HelloWorld";

MurmurHash3_x86_32(input, strlen(input), seed, &hash);
printf("x86_32:  %08x\n", hash);
Odpovězeno 12/04/2017 v 08:27
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more