Algoritmo CRC32 en C#
Hace un tiempo tuve que hacer un trabajo con este algoritmo y no lo conseguía, depués de buscar un poco lo encontré casi listo para utilizar. Pero a ver, que es el algoritmo CRC32 y para que me puede servir?
El algoritmo CRC32 (Código de Redundancia Cíclica) se utiliza para porteger la integridad de los datos al verificar que dichos datos no han sido alterados, comparando el CRC32 de los datos enviados con el CRC32 de los datos recibidos. Lo que ocurre aquí es que si se modifica aunque sea un punto de los datos iniciales, el resultado del CRC32 es completamente diferente.
Pues bien, hice una clase adicional para poder invocarlo de forma más fácil ya que la versión original me pareció algo rebuscado y yo necesitaba dicho algoritmo pero con un resultado en decimal y no en hexadecimal como devuelve el algoritmo inicial.
La forma de invocar el resultado desde cualquier punto de la aplicación es la siguiente:
Algoritmos.AlgoritmoCRC32 al = new Algoritmos.AlgoritmoCRC32(); textBox1.Text = al.CRC32Hexa(”Hola mundo“); textBox2.Text = al.CRC32Decimal(”Hola mundo“);
El resultado CRC32 de ambos casos es: F9EC15CE y 4192998862 respectivamente, si se modifica algo de la cadena, los resultados serían completamente diferentes.
Ahora, en el Zip que contiene las clases, encontrarán 3 archivos, Algorithm.cs y CRC32.cs son las clases iniciales que obtuve, la clase AlgoritmoCRC32.cs es la clase que implementé para hacer un poco más accesible el código, tal como ven en el siguiente código:
using System; using System.Collections.Generic; using System.Text; namespace Algoritmos { class AlgoritmoCRC32 { public AlgoritmoCRC32() { } public string CRC32Hexa(string cadena) { return ChkSumCRC32(cadena); } public string CRC32Decimal(string cadena) { return Convert.ToInt64(ChkSumCRC32(cadena), 16).ToString(); } private string ChkSumCRC32(string cadena) { Algorithm alg = new Algorithm(”CRC32“, new CRC32()); alg.hash.Initialize(); byte[] rawBytes = System.Text.ASCIIEncoding.ASCII.GetBytes(cadena); byte[] hash = alg.hash.ComputeHash(rawBytes); StringBuilder sb = new StringBuilder(hash.Length * 2 + (hash.Length / 8)); for (int i = 0; i < hash.Length; i++) sb.Append(BitConverter.ToString(hash, i, 1)); return sb.ToString().TrimEnd(new char[] { ‘ ‘ }); } } }
Descargar Algoritmo CRC32 para C#
Url donde obtuve el código: http://www.codeproject.com/cs/algorithms/crc32_dotnet.asp
Espero que les sea de utilidad.
Saludos.





Diciembre 14th, 2008 at 11:33 pm
muy buen codigo gracias lo estuve buscando, aunque no conosca mucho c# y mas visual basic XD, gracias