Пример шифрования SHA512 в c

Я не могу найти пример шифрования строки с помощью «SHA-512» в C. Может кто-нибудь помочь мне с кодом или ссылкой. Заранее спасибо.


person badr assa    schedule 03.07.2013    source источник
comment
SHA 512 не является алгоритмом шифрования. Скорее он используется для хеширования. Где ты застрял? Что вы действительно пытаетесь сделать?   -  person Mike Dinescu    schedule 03.07.2013
comment
См. здесь на SO.   -  person kgdesouz    schedule 03.07.2013


Ответы (3)


SHA-512 — это не алгоритм шифрования, а криптографический хэш. , что совсем другое.

Одной из библиотек, которую вы можете использовать для выполнения хэшей SHA, является OpenSSL. Вот пример вычисления необработанного хэша SHA-512 некоторых данных с помощью 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.
person Adam Rosenfield    schedule 03.07.2013
comment
Полезный ответ! Однако я думаю, что вам нужно сделать sizeof(data)-1, чтобы исключить завершающий нулевой символ. - person JustinB; 17.02.2014
comment
@JustinB да, иначе он мог бы использовать strlen(data) - person jackcogdill; 15.04.2014
comment
И спасибо, мне нужно было увидеть этот ответ. - person jackcogdill; 15.04.2014

Если вы хотите хранить пароли с помощью 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);
}
person lathspell    schedule 05.07.2013
comment
Спасибо за ответ, я нашел код SHA1 и использовал его, он лучше, чем MD5, и все еще силен. я буду использовать значения солей с паролями и хранить хэши в файле, только суперпользователь может получить доступ к этому файлу. Если я ошибаюсь поправьте меня. - person badr assa; 07.07.2013
comment
char *hash = crypt("secret", "$6$12345678"); Кажется, в конце соли отсутствует символ "$". Формат: $6$<salt>$<hashed secret>. Это также то, что я видел во многих других примерах. - person GoinOff; 19.10.2020
comment
Спасибо за указание, я отредактировал пример. Однако оба они дают одинаковый результат в Linux. - person lathspell; 19.10.2020

Для этого вы можете использовать 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`
person yeyo    schedule 03.07.2013