Я не могу найти пример шифрования строки с помощью «SHA-512» в C. Может кто-нибудь помочь мне с кодом или ссылкой. Заранее спасибо.
Пример шифрования SHA512 в c
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
Полезный ответ! Однако я думаю, что вам нужно сделать sizeof(data)-1, чтобы исключить завершающий нулевой символ.
- person JustinB; 17.02.2014
@JustinB да, иначе он мог бы использовать
strlen(data)
- person jackcogdill; 15.04.2014
И спасибо, мне нужно было увидеть этот ответ.
- 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
Спасибо за ответ, я нашел код SHA1 и использовал его, он лучше, чем MD5, и все еще силен. я буду использовать значения солей с паролями и хранить хэши в файле, только суперпользователь может получить доступ к этому файлу. Если я ошибаюсь поправьте меня.
- person badr assa; 07.07.2013
char *hash = crypt("secret", "$6$12345678");
Кажется, в конце соли отсутствует символ "$". Формат: $6$<salt>$<hashed secret>
. Это также то, что я видел во многих других примерах.
- person GoinOff; 19.10.2020
Спасибо за указание, я отредактировал пример. Однако оба они дают одинаковый результат в 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