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

heks

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

Alex91

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

В переменную к примеру подставляем значение
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 379
Благодарностей
935
Баллы
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 828
Благодарностей
1 524
Баллы
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 266
Благодарностей
342
Баллы
83

Alex91

Активный пользователь
Регистрация
15.08.2024
Сообщения
531
Благодарностей
137
Баллы
43

Alex91

Активный пользователь
Регистрация
15.08.2024
Сообщения
531
Благодарностей
137
Баллы
43
  • Спасибо
Реакции: heks

heks

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

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