2013-07-03 45 views
-3

我找不到在C中使用「SHA-512」加密字符串的示例。012le有人可以幫助我使用某些代碼或鏈接。 預先感謝您。加密SHA512在c中的示例

+7

SHA 512不是加密算法。而是用於散列。你卡在哪裏?你真的想做什麼? –

+0

請參閱[這裏](http://stackoverflow.com/questions/12772102/how-to-convert-openssl-sha-512-hash-to-gmp-number-to-use-in-rsa-encryption-metho)在SO上。 – kgdesouz

回答

5

您可以使用GLib的這件事情,要知道G_CHECKSUM_SHA512的,它可能會要求您安裝GLib的較新版本,請訪問: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; 
} 

編譯

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

SHA-512不是加密算法,它是一個cryptographic hash,它是完全不同的。

您可以用來執行SHA散列的一個庫是OpenSSL。下面是使用OpenSSL計算一些數據的原始SHA-512散列的例子:

#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

推薦答案!不過,我認爲你需要做sizeof(data)-1來排除終止空字符。 – JustinB

+2

@JustinB是或他可以使用'strlen(data)' – jackcogdill

+0

謝謝,我需要看到這個答案。 – jackcogdill

4

如果要使用SHA-512,請考慮使用「鹽」值,使彩虹表攻擊更難存儲密碼。例如,「12345678」將是一個隨機字符串。 「$ 6 $」標記SHA-512:

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

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

謝謝你的回答,我找到了一個SHA1代碼,我使用它,它比MD5更好,而且仍然很強大。我將在密碼中使用salt值並將哈希存儲在文件中,只有超級用戶才能訪問該文件。如果我錯了,糾正我。 –