Crc32.cs
public static class Crc32
{
public static uint HashToUInt32(byte[] source)
{
const uint polynomial = 0xEDB88320; // ISO-HDLC
var crc = 0b11111111_11111111_11111111_11111111;
foreach (var b in source)
{
crc ^= b;
for (var bit = 0; bit < 8; bit++)
{
var lsb = crc & 1;
var mask = lsb * polynomial;
crc = (crc >> 1) ^ mask;
}
}
return crc ^ 0b11111111_11111111_11111111_11111111;
}
}