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; } }