¿Cómo calculo CRC32 de una cuerda?

¿Cómo calculo el CRC32 (checksum de redundancia cíclica) de una cadena en .NET?

Este tipo 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 desde 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); 

Como parece que está buscando calcular el CRC32 de una cadena (en lugar de un archivo), hay un buen ejemplo aquí: https://rosettacode.org/wiki/CRC-32#C.23

El código debería desaparecer alguna vez:

 ///  /// 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/