Сгенерировать из переменной хеш sha512

heks

Client
Регистрация
01.10.2013
Сообщения
1 376
Благодарностей
388
Баллы
83
В переменную к примеру подставляем значение
5HnXv130kjQq!1
должно получиться значение
4c07f2ecf600b7db90bb5919c7e184cbc2407ca1b1a8e706f659703da3faa1e9ff1c148dc50e9233b11eca1c1b9b992e31f87a66585bc8e94474abcee8bed8c4
пример тут https://toolkit.vercel.app/sha-512/
кубик на c# нужен. Заранее спасибо.
 
Последнее редактирование:

Alex91

Известная личность
Read only
Регистрация
15.08.2024
Сообщения
880
Благодарностей
253
Баллы
63
Ну век ИИ же... Ладно скопипастю , что дипсик выдает... :-)

В переменную к примеру подставляем значение
5HnXv130kjQq!1
должно получиться значение
4c07f2ecf600b7db90bb5919c7e184cbc2407ca1b1a8e706f659703da3faa1e9ff1c148dc50e9233b11eca1c1b9b992e31f87a66585bc8e94474abcee8bed8c4
пример тут https://toolkit.vercel.app/sha-512/
кубик на c# нужен. Заранее спасибо.
Хорошо, мне нужно создать кубик на C#, который будет вычислять SHA-512 хеш для строки "5HnXv130kjQq!1" и получать определенный результат. Давайте разбираться по шагам.

Сначала вспомню, как в C# работают с хешированием. Для SHA512 есть класс SHA512Managed в пространстве имен System.Security.Cryptography. Нужно взять входную строку, преобразовать ее в байты, вычислить хеш, а затем конвертировать байты хеша в шестнадцатеричную строку.

Важно правильно выбрать кодировку при преобразовании строки в байты. Скорее всего, используется UTF-8, но лучше проверить пример. На сайте инструмента, который упомянут, возможно, тоже используется UTF-8. Попробую сначала с UTF-8.

Далее шаги:

1. Получить входную строку.

2. Преобразовать строку в массив байт с использованием кодировки UTF-8.

3. Вычислить SHA-512 хеш от этих байт.

4. Конвертировать полученный хеш в байтах в шестнадцатеричную строку в нижнем регистре.

Теперь проверю, как это реализовать в коде. Нужно создать метод, который принимает строку и возвращает хеш. Использую using для SHA512Managed, чтобы правильно освободить ресурсы.

Пример кода:

public string ComputeSha512Hash(string input)

{

using (SHA512 sha512 = SHA512.Create())

{

byte[] inputBytes = Encoding.UTF8.GetBytes(input);

byte[] hashBytes = sha512.ComputeHash(inputBytes);

return BitConverter.ToString(hashBytes).Replace("-", "").ToLower();

}

}

Проверю, что BitConverter.ToString создает строку с разделителями "-", которые нужно убрать, и перевести в нижний регистр, если это требуется. В примере результата все буквы в нижнем регистре, так что ToLower() нужен.

Теперь проверю, что для входной строки "5HnXv130kjQq!1" этот код выдаст ожидаемый хеш. Если результат не совпадает, возможно, проблема в кодировке. Нужно убедиться, что исходная строка преобразуется в байты правильно. Иногда могут быть проблемы с спецсимволами или кодировкой, но в данном случае строка кажется стандартной.

Может быть, на сайте используется другая кодировка, например, UTF-16LE или ASCII. Если с UTF-8 не сходится, попробую другие варианты. Но сначала проверю с UTF-8.

Еще момент: в некоторых реализациях SHA512 может добавляться соль или итерации, но стандартный SHA512 не использует соль. Должно быть прямое хеширование.

Теперь напишу этот код в кубике для C# в каком-нибудь инструменте, например, в программе или онлайн компиляторе, и проверю результат. Если совпадет, значит все верно. Если нет, тогда нужно искать ошибку.

Допустим, код написан, но результат не совпадает. Тогда проверю:

- Правильно ли преобразована строка в байты. Например, спецсимволы вроде '!' и других должны корректно кодироваться.

- Правильно ли преобразуются байты в hex. BitConverter может выводить в верхнем регистре, поэтому ToLower() важен.

- Убедиться, что хеш именно SHA512, а не другой алгоритм.

Еще можно использовать онлайн генератор SHA512 для проверки. Вставляю строку "5HnXv130kjQq!1" в указанный инструмент и сравниваю результат. Если совпадает с ожидаемым, значит код правильный.

Если после всех проверок код работает, тогда оформлю его как кубик для C#. Возможно, в контексте, где используется кубик (например, в проекте или платформе), нужно учесть входные и выходные переменные, но логика остается той же.

Чтобы создать кубик на C#, который вычисляет SHA-512 хеш для строки, выполните следующие шаги:

Код кубика:

csharp
Copy
using System;
using System.Text;
using System.Security.Cryptography;

public class SHA512Hasher
{
public static string ComputeHash(string input)
{
using (SHA512 sha512 = SHA512.Create())
{
// Преобразование входной строки в байты с использованием UTF-8
byte[] inputBytes = Encoding.UTF8.GetBytes(input);

// Вычисление хеша
byte[] hashBytes = sha512.ComputeHash(inputBytes);

// Конвертация байтов в шестнадцатеричную строку без дефисов и в нижнем регистре
return BitConverter.ToString(hashBytes).Replace("-", "").ToLower();
}
}
}
Использование:

csharp
Copy
string input = "5HnXv130kjQq!1";
string hash = SHA512Hasher.ComputeHash(input);
Console.WriteLine(hash); // Вывод: 4c07f2ecf600b7db90bb5919c7e184cbc2407ca1b1a8e706f659703da3faa1e9ff1c148dc50e9233b11eca1c1b9b992e31f87a66585bc8e94474abcee8bed8c4
Объяснение:

Кодировка строки: Входная строка преобразуется в байты с использованием кодировки UTF-8.

Вычисление хеша: Используется метод SHA512.Create() для получения экземпляра алгоритма SHA-512.

Форматирование результата: Байты хеша конвертируются в шестнадцатеричную строку без разделителей и в нижнем регистре.

Проверьте результат с помощью онлайн-инструмента, чтобы убедиться в корректности работы.

———————
В общем я думаю ты сам сообразишь, что в общий код кидать, что в юзинги прописать... Не новичок же в c# ;-)
 

Zedx

Client
Регистрация
12.06.2018
Сообщения
1 410
Благодарностей
963
Баллы
113
В директивы using:
using System.Security.Cryptography;

В кубике:
C#:
byte[] inputBytes = Encoding.UTF8.GetBytes(project.Variables["input"].Value);

using (SHA512 sha512 = SHA512.Create())
{
    byte[] hashBytes = sha512.ComputeHash(inputBytes);

    StringBuilder sb = new StringBuilder();
    foreach (byte b in hashBytes)
    {
        sb.Append(b.ToString("x2"));
    }

    project.Variables["result"].Value = sb.ToString();
}
 
  • Спасибо
Реакции: slavyn8213 и heks

samsonnn

Client
Регистрация
02.06.2015
Сообщения
1 934
Благодарностей
1 664
Баллы
113
В переменную к примеру подставляем значение
5HnXv130kjQq!1
должно получиться значение
4c07f2ecf600b7db90bb5919c7e184cbc2407ca1b1a8e706f659703da3faa1e9ff1c148dc50e9233b11eca1c1b9b992e31f87a66585bc8e94474abcee8bed8c4
пример тут https://toolkit.vercel.app/sha-512/
кубик на c# нужен. Заранее спасибо.
129900

129901


C#:
string input = project.Variables["test"].Value; // в переменной test значение 5HnXv130kjQq!1
byte[] inputBytes = System.Text.Encoding.UTF8.GetBytes(input);
byte[] hashBytes = System.Security.Cryptography.SHA512.Create().ComputeHash(inputBytes);
project.Variables["result"].Value = BitConverter.ToString(hashBytes).Replace("-", "").ToLower(); // в переменной result результат: 4c07f2ecf600b7db90bb5919c7e184cbc2407ca1b1a8e706f659703da3faa1e9ff1c148dc50e9233b11eca1c1b9b992e31f87a66585bc8e94474abcee8bed8c4
 
Последнее редактирование:
  • Спасибо
Реакции: heks

heks

Client
Регистрация
01.10.2013
Сообщения
1 376
Благодарностей
388
Баллы
83

Alex91

Известная личность
Read only
Регистрация
15.08.2024
Сообщения
880
Благодарностей
253
Баллы
63

Alex91

Известная личность
Read only
Регистрация
15.08.2024
Сообщения
880
Благодарностей
253
Баллы
63
  • Спасибо
Реакции: heks

heks

Client
Регистрация
01.10.2013
Сообщения
1 376
Благодарностей
388
Баллы
83
всем спасибо
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)