Class CyclicRedundancyCheck32
Provides a CRC-32 implementation of the CRC (Cyclic Redundancy Check) checksum algorithm for 32-bit hash values. This class cannot be inherited.
public sealed class CyclicRedundancyCheck32 : CyclicRedundancyCheck, IHash, IConfigurable<CyclicRedundancyCheckOptions>
- Inheritance
-
CyclicRedundancyCheck32
- Implements
- Inherited Members
Examples
The following example shows how to compute a CRC-32 checksum with the common reflected configuration.
using System;
using System.Text;
using Cuemon;
using Cuemon.Security;
namespace MyApp.Examples;
public static class CyclicRedundancyCheck32Example
{
public static void Demonstrate()
{
var checksum = new CyclicRedundancyCheck32(setup: options =>
{
options.ByteOrder = Endianness.BigEndian;
options.ReflectInput = true;
options.ReflectOutput = true;
});
HashResult result = checksum.ComputeHash(Encoding.ASCII.GetBytes("123456789"));
Console.WriteLine(result.ToHexadecimalString().ToLowerInvariant());
Console.WriteLine(checksum.InitialValue);
Console.WriteLine(checksum.FinalXor);
var alternate = new CyclicRedundancyCheck32(polynomial: 0xEDB88320, initialValue: 0xFFFFFFFF, finalXor: 0xFFFFFFFF);
Console.WriteLine(alternate.ComputeHash("Cuemon").ToBase64String());
}
}
Constructors
CyclicRedundancyCheck32(uint, uint, uint, Action<CyclicRedundancyCheckOptions>)
Initializes a new instance of the CyclicRedundancyCheck32 class.
public CyclicRedundancyCheck32(uint polynomial = 79764919, uint initialValue = 4294967295, uint finalXor = 4294967295, Action<CyclicRedundancyCheckOptions> setup = null)
Parameters
polynomialuintThis is a binary value that should be specified as a hexadecimal number. Default is
0x4C11DB7.initialValueuintThis parameter specifies the initial value of the register when the algorithm starts. Default is
0xFFFFFFFF.finalXoruintThis is an W-bit value that should be specified as a hexadecimal number. Default is
0xFFFFFFFF.setupAction<CyclicRedundancyCheckOptions>The CyclicRedundancyCheckOptions which may be configured.
Methods
ComputeHash(byte[])
Computes the hash value for the specified byte[].
public override HashResult ComputeHash(byte[] input)
Parameters
inputbyte[]The byte[] to compute the hash code for.
Returns
- HashResult
A HashResult containing the computed hash code of the specified
input.
Remarks
Inspiration and praises goes to http://www.sunshine2k.de/articles/coding/crc/understanding_crc.html
PolynomialIndexInitializer(byte)
Returns the initial value for the specified index of the polynomial LookupTable.
protected override ulong PolynomialIndexInitializer(byte index)
Parameters
indexbyteThe index of the array of polynomial values ranging from 0 to 255.
Returns
- ulong
The initial value for the specified
index.
PolynomialSlotCalculator(ref ulong, ulong)
Computes the polynomial checksum value in steps of 8 (0-7) x 256 (0-255) giving a total of 2048 times.
protected override void PolynomialSlotCalculator(ref ulong checksum, ulong polynomial)
Parameters
checksumulongThe checksum that is iterated 8 times (0-7) in 256 steps (0-255).
polynomialulongThe polynomial value.