在c中加密SHA512示例

时间:2013-07-03 19:16:21

标签: c sha512

我在C中找不到用“SHA-512”加密字符串的示例。 有人可以帮我一些代码或链接。 提前谢谢。

3 个答案:

答案 0 :(得分:13)

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 :(得分:6)

您可以使用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`

答案 2 :(得分:5)

如果您想使用SHA-512存储密码,请考虑使用“salt”值来使彩虹表攻击更难。例如,“12345678”将是一个随机字符串。 “$ 6 $”标志着SHA-512:

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

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