123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317 |
- using System;
- using System.Security.Cryptography;
- namespace wf
- {
- public class CRC32 : HashAlgorithm
- {
- public override void Initialize()
- {
- this.result = CRC32.MaskValue;
- }
- public override int HashSize
- {
- get
- {
- return 32;
- }
- }
- public uint ComputeChecksum(byte[] bytes)
- {
- uint num = CRC32.MaskValue;
- for (int i = 0; i < bytes.Length; i++)
- {
- byte b = (byte)((num & 255u) ^ (uint)bytes[i]);
- num = (num >> 8 ^ CRC32.Crc32tabel[(int)b]);
- }
- return ~num;
- }
- protected override void HashCore(byte[] array, int ibStart, int cbSize)
- {
- while (--cbSize >= 0)
- {
- this.result = (CRC32.Crc32tabel[(int)((UIntPtr)((this.result ^ (uint)array[ibStart++]) & 255u))] ^ this.result >> 8);
- }
- }
- protected override byte[] HashFinal()
- {
- this.result ^= CRC32.MaskValue;
- this.HashValue = new byte[]
- {
- (byte)(this.result >> 24 & 255u),
- (byte)(this.result >> 16 & 255u),
- (byte)(this.result >> 8 & 255u),
- (byte)(this.result & 255u)
- };
- return this.HashValue;
- }
- private static readonly uint[] Crc32tabel = new uint[]
- {
- 0u,
- 1996959894u,
- 3993919788u,
- 2567524794u,
- 124634137u,
- 1886057615u,
- 3915621685u,
- 2657392035u,
- 249268274u,
- 2044508324u,
- 3772115230u,
- 2547177864u,
- 162941995u,
- 2125561021u,
- 3887607047u,
- 2428444049u,
- 498536548u,
- 1789927666u,
- 4089016648u,
- 2227061214u,
- 450548861u,
- 1843258603u,
- 4107580753u,
- 2211677639u,
- 325883990u,
- 1684777152u,
- 4251122042u,
- 2321926636u,
- 335633487u,
- 1661365465u,
- 4195302755u,
- 2366115317u,
- 997073096u,
- 1281953886u,
- 3579855332u,
- 2724688242u,
- 1006888145u,
- 1258607687u,
- 3524101629u,
- 2768942443u,
- 901097722u,
- 1119000684u,
- 3686517206u,
- 2898065728u,
- 853044451u,
- 1172266101u,
- 3705015759u,
- 2882616665u,
- 651767980u,
- 1373503546u,
- 3369554304u,
- 3218104598u,
- 565507253u,
- 1454621731u,
- 3485111705u,
- 3099436303u,
- 671266974u,
- 1594198024u,
- 3322730930u,
- 2970347812u,
- 795835527u,
- 1483230225u,
- 3244367275u,
- 3060149565u,
- 1994146192u,
- 31158534u,
- 2563907772u,
- 4023717930u,
- 1907459465u,
- 112637215u,
- 2680153253u,
- 3904427059u,
- 2013776290u,
- 251722036u,
- 2517215374u,
- 3775830040u,
- 2137656763u,
- 141376813u,
- 2439277719u,
- 3865271297u,
- 1802195444u,
- 476864866u,
- 2238001368u,
- 4066508878u,
- 1812370925u,
- 453092731u,
- 2181625025u,
- 4111451223u,
- 1706088902u,
- 314042704u,
- 2344532202u,
- 4240017532u,
- 1658658271u,
- 366619977u,
- 2362670323u,
- 4224994405u,
- 1303535960u,
- 984961486u,
- 2747007092u,
- 3569037538u,
- 1256170817u,
- 1037604311u,
- 2765210733u,
- 3554079995u,
- 1131014506u,
- 879679996u,
- 2909243462u,
- 3663771856u,
- 1141124467u,
- 855842277u,
- 2852801631u,
- 3708648649u,
- 1342533948u,
- 654459306u,
- 3188396048u,
- 3373015174u,
- 1466479909u,
- 544179635u,
- 3110523913u,
- 3462522015u,
- 1591671054u,
- 702138776u,
- 2966460450u,
- 3352799412u,
- 1504918807u,
- 783551873u,
- 3082640443u,
- 3233442989u,
- 3988292384u,
- 2596254646u,
- 62317068u,
- 1957810842u,
- 3939845945u,
- 2647816111u,
- 81470997u,
- 1943803523u,
- 3814918930u,
- 2489596804u,
- 225274430u,
- 2053790376u,
- 3826175755u,
- 2466906013u,
- 167816743u,
- 2097651377u,
- 4027552580u,
- 2265490386u,
- 503444072u,
- 1762050814u,
- 4150417245u,
- 2154129355u,
- 426522225u,
- 1852507879u,
- 4275313526u,
- 2312317920u,
- 282753626u,
- 1742555852u,
- 4189708143u,
- 2394877945u,
- 397917763u,
- 1622183637u,
- 3604390888u,
- 2714866558u,
- 953729732u,
- 1340076626u,
- 3518719985u,
- 2797360999u,
- 1068828381u,
- 1219638859u,
- 3624741850u,
- 2936675148u,
- 906185462u,
- 1090812512u,
- 3747672003u,
- 2825379669u,
- 829329135u,
- 1181335161u,
- 3412177804u,
- 3160834842u,
- 628085408u,
- 1382605366u,
- 3423369109u,
- 3138078467u,
- 570562233u,
- 1426400815u,
- 3317316542u,
- 2998733608u,
- 733239954u,
- 1555261956u,
- 3268935591u,
- 3050360625u,
- 752459403u,
- 1541320221u,
- 2607071920u,
- 3965973030u,
- 1969922972u,
- 40735498u,
- 2617837225u,
- 3943577151u,
- 1913087877u,
- 83908371u,
- 2512341634u,
- 3803740692u,
- 2075208622u,
- 213261112u,
- 2463272603u,
- 3855990285u,
- 2094854071u,
- 198958881u,
- 2262029012u,
- 4057260610u,
- 1759359992u,
- 534414190u,
- 2176718541u,
- 4139329115u,
- 1873836001u,
- 414664567u,
- 2282248934u,
- 4279200368u,
- 1711684554u,
- 285281116u,
- 2405801727u,
- 4167216745u,
- 1634467795u,
- 376229701u,
- 2685067896u,
- 3608007406u,
- 1308918612u,
- 956543938u,
- 2808555105u,
- 3495958263u,
- 1231636301u,
- 1047427035u,
- 2932959818u,
- 3654703836u,
- 1088359270u,
- 936918000u,
- 2847714899u,
- 3736837829u,
- 1202900863u,
- 817233897u,
- 3183342108u,
- 3401237130u,
- 1404277552u,
- 615818150u,
- 3134207493u,
- 3453421203u,
- 1423857449u,
- 601450431u,
- 3009837614u,
- 3294710456u,
- 1567103746u,
- 711928724u,
- 3020668471u,
- 3272380065u,
- 1510334235u,
- 755167117u
- };
- private static readonly uint MaskValue = uint.MaxValue;
- private uint result;
- }
- }
|