Hash una cadena con SHA256 en C#

Muhammad Zeeshan 12 octubre 2023
Hash una cadena con SHA256 en C#

En el siguiente artículo, aprenderá cómo codificar una cadena usando el algoritmo sha256 en el lenguaje de programación C#.

En criptografía, hashing se refiere a un método que asigna una cadena binaria de una longitud indeterminada a una cadena binaria corta con una longitud definida. Esta cadena binaria corta se conoce como hash.

Las funciones hash son otro nombre para hash. Es una práctica estándar usar funciones hash para proteger información confidencial como contraseñas y certificados digitales contra el acceso no autorizado.

Hash una cadena con SHA256 en C#

Para explicar mejor cómo hacer hash de una cadena usando sha256, el siguiente ejemplo puede guiarlo.

Para comenzar, importe las siguientes bibliotecas:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Security.Cryptography;

Primero, crearemos una función llamada HashWithSha256 que convertirá la entrada del usuario en salida hash. Esta función tomará la entrada del usuario como parámetro.

static string HashWithSha256(string ActualData) {}

Para obtener el hash SHA256, utilizaremos la clase SHA256. Es necesario crear primero un objeto hash SHA256 usando el método .Create().

using (SHA256 s = SHA256.Create()) {}

Luego, use la función Encoding.GetBytes() para convertir la cadena proporcionada en una matriz de bytes.

byte[] bytes = s.ComputeHash(Encoding.UTF8.GetBytes(ActualData));

Utilice el StringBuilder para convertir la matriz byte en una cadena.

StringBuilder b = new StringBuilder();
for (int i = 0; i < bytes.Length; i++) {
  b.Append(bytes[i].ToString("x2"));
}

Comencemos por construir la cadena que queremos convertir.

string s1 = "Muhammad Zeeshan";
Console.WriteLine("User Input: {0}", s1);

Por último, deberá almacenar la salida de la cadena de entrada en una variable local HashString después de proporcionarla como parámetro a la función HashWithSha256.

string HashString = HashWithSha256(s1);
Console.WriteLine("Hash Output: {0}", HashString);
Console.ReadLine();

Código fuente completo:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Security.Cryptography;

namespace HashStringByZeeshan {
  class Program {
    static void Main(string[] args) {
      string s1 = "Muhammad Zeeshan";
      Console.WriteLine("User Input: {0}", s1);
      string HashString = HashWithSha256(s1);
      Console.WriteLine("Hash Output: {0}", HashString);
      Console.ReadLine();
    }

    static string HashWithSha256(string ActualData) {
      using (SHA256 s = SHA256.Create()) {
        byte[] bytes = s.ComputeHash(Encoding.UTF8.GetBytes(ActualData));
        StringBuilder b = new StringBuilder();
        for (int i = 0; i < bytes.Length; i++) {
          b.Append(bytes[i].ToString("x2"));
        }
        return b.ToString();
      }
    }
  }
}

Producción :

User Input: Muhammad Zeeshan
Hash Output: b77387c5681141bfb72428c7ee23b67ce1bc08f976954368fa9cab070ffb837b
Muhammad Zeeshan avatar Muhammad Zeeshan avatar

I have been working as a Flutter app developer for a year now. Firebase and SQLite have been crucial in the development of my android apps. I have experience with C#, Windows Form Based C#, C, Java, PHP on WampServer, and HTML/CSS on MYSQL, and I have authored articles on their theory and issue solving. I'm a senior in an undergraduate program for a bachelor's degree in Information Technology.

LinkedIn