Nuestro grupo de expertos despúes de días de investigación y recopilar de datos, obtuvimos la solución, esperamos que todo este artículo sea de utilidad en tu plan.
Solución:
Este chico parece tener tu respuesta.
https://damieng.com/blog/2006/08/08/calculating_crc32_in_c_and_net
Y en caso de que el blog desaparezca o rompa la URL, aquí está el enlace de github:
https://github.com/damieng/DamienGKit/blob/master/CSharp/DamienG.Library/Security/Cryptography/Crc32.cs
Uso de la clase Crc32 de la publicación del blog:
Crc32 crc32 = new Crc32();
String hash = String.Empty;
using (FileStream fs = File.Open("c:\myfile.txt", FileMode.Open))
foreach (byte b in crc32.ComputeHash(fs)) hash += b.ToString("x2").ToLower();
Console.WriteLine("CRC-32 is 0", hash);
Dado que parece estar buscando calcular el CRC32 de un string (en lugar de un archivo) hay un buen ejemplo aquí: https://rosettacode.org/wiki/CRC-32#C.23
El código en caso de que alguna vez desaparezca:
///
/// Performs 32-bit reversed cyclic redundancy checks.
///
public class Crc32
#region Constants
///
/// Generator polynomial (modulo 2) for the reversed CRC32 algorithm.
///
private const UInt32 s_generator = 0xEDB88320;
#endregion
#region Constructors
///
/// Creates a new instance of the Crc32 class.
///
public Crc32()
// Constructs the checksum lookup table. Used to optimize the checksum.
m_checksumTable = Enumerable.Range(0, 256).Select(i =>
var tableEntry = (uint)i;
for (var j = 0; j < 8; ++j)
tableEntry = ((tableEntry & 1) != 0)
? (s_generator ^ (tableEntry >> 1))
: (tableEntry >> 1);
return tableEntry;
).ToArray();
#endregion
#region Methods
///
/// Calculates the checksum of the byte stream.
///
/// The byte stream to calculate the checksum for.
/// A 32-bit reversed checksum.
public UInt32 Get(IEnumerable byteStream)
try
// Initialize checksumRegister to 0xFFFFFFFF and calculate the checksum.
return ~byteStream.Aggregate(0xFFFFFFFF, (checksumRegister, currentByte) =>
(m_checksumTable[(checksumRegister & 0xFF) ^ Convert.ToByte(currentByte)] ^ (checksumRegister >> 8)));
catch (FormatException e)
throw new CrcException("Could not read the stream out as bytes.", e);
catch (InvalidCastException e)
throw new CrcException("Could not read the stream out as bytes.", e);
catch (OverflowException e)
throw new CrcException("Could not read the stream out as bytes.", e);
#endregion
#region Fields
///
/// Contains a cache of calculated checksum chunks.
///
private readonly UInt32[] m_checksumTable;
#endregion
y para usarlo:
var arrayOfBytes = Encoding.ASCII.GetBytes("The quick brown fox jumps over the lazy dog");
var crc32 = new Crc32();
Console.WriteLine(crc32.Get(arrayOfBytes).ToString("X"));
Puede probar los valores de entrada/salida aquí: https://crccalc.com/
Reseñas y valoraciones del tutorial
Si te animas, tienes la libertad de dejar una reseña acerca de qué te ha parecido este escrito.