2013-07-03 6 views
-3

Je ne trouve pas d'exemple de cryptage d'une chaîne avec "SHA-512" dans C. Quelqu'un peut-il m'aider avec du code ou un lien. Merci d'avance.Cryptage SHA512 Exemple dans c

+7

SHA 512 n'est pas un algorithme de chiffrement. Au contraire, il est utilisé pour le hachage. Où êtes-vous coincé? Qu'essayez-vous vraiment de faire? –

+0

Voir [ici] (http://stackoverflow.com/questions/12772102/how-to-convert-openssl-sha-512-hash-to-gmp-number-to-use-in-rsa-encryption-metho) sur SO. – kgdesouz

Répondre

5

Vous pouvez utiliser GLib pour cette question, être au courant de G_CHECKSUM_SHA512, il peut vous demander d'installer une version plus récente de GLib, visitez: https://developer.gnome.org/glib/stable/glib-Data-Checksums.html

#include <glib.h> 
#include <string.h> 

int 
main(void) 
{ 
     char *string = "Hello World"; 
     gchar *sha512; 

     sha512 = g_compute_checksum_for_string(G_CHECKSUM_SHA512, string, strlen(string)); 
     g_print("%s\n", sha512); 
     g_free(sha512); 
     return 0; 
} 

compilez

$ gcc -o sha512 sha512.c `pkg-config --cflags --libs glib-2.0` 
12

SHA-512 n'est pas un algorithme de cryptage, c'est un cryptographic hash, ce qui est complètement différent.

Une bibliothèque que vous pouvez utiliser pour effectuer des hachages SHA est OpenSSL. Voici un exemple de calcul du hachage brut SHA-512 de certaines données avec OpenSSL:

#include <openssl/sha.h> 
... 
char data[] = "data to hash"; 
char hash[SHA512_DIGEST_LENGTH]; 
SHA512(data, sizeof(data) - 1, hash); 

// 'hash' now contains the raw 64-byte binary hash. If you want to print it out 
// in a human-readable format, you'll need to convert it to hex, e.g. 
+1

Réponse utile! Cependant, je pense que vous devez faire sizeof (data) -1 pour exclure le caractère nul final. – JustinB

+2

@JustinB ouais il pourrait utiliser 'strlen (data)' – jackcogdill

+0

Et merci, j'avais besoin de voir cette réponse. – jackcogdill

4

Si vous souhaitez stocker les mots de passe en utilisant SHA-512, s'il vous plaît envisager d'utiliser une valeur « sel » pour faire des attaques tables arc-en-plus difficile . Exemple, "12345678" serait une chaîne aléatoire. Marques "$ 6 $" SHA-512:

#include <crypt.h> 
#include <stdio.h> 

int main() { 
    char *hash = crypt("secret", "$6$12345678"); 
    printf("hashed=%s\n", hash); 
} 
+0

Merci pour la réponse, j'ai trouvé un code SHA1, et je l'ai utilisé, c'est mieux que MD5 et toujours aussi fort. Je vais utiliser des valeurs de sels avec les mots de passe et stocker les hachages dans un fichier, seul le super utilisateur peut accéder à ce fichier. Si je me trompe, corrigez-moi. –