Do CRC32 hashing.

image_pdfimage_print
   
 
/* --------------------------------------------------------------------------
 *
 * License
 *
 * The contents of this file are subject to the Jabber Open Source License
 * Version 1.0 (the "License").  You may not copy or use this file, in either
 * source code or executable form, except in compliance with the License.  You
 * may obtain a copy of the License at http://www.jabber.com/license/ or at
 * http://www.opensource.org/.  
 *
 * Software distributed under the License is distributed on an "AS IS" basis,
 * WITHOUT WARRANTY OF ANY KIND, either express or implied.  See the License
 * for the specific language governing rights and limitations under the
 * License.
 *
 * Copyrights
 * 
 * Portions created by or assigned to Cursive Systems, Inc. are 
 * Copyright (c) 2002 Cursive Systems, Inc.  All Rights Reserved.  Contact
 * information for Cursive Systems, Inc. is available at http://www.cursive.net/.
 *
 * Portions Copyright (c) 2002 Joe Hildebrand.
 * 
 * Acknowledgements
 * 
 * Special thanks to the Jabber Open Source Contributors for their
 * suggestions and support of Jabber.
 * 
 * --------------------------------------------------------------------------*/
using System;
using System.Security.Cryptography;
namespace bedrock.util
{
    /// <summary>
    /// Do CRC32 hashing.  Note: just use SHA1, or MD5, from System.Security.Cryptography.
    /// </summary>
    public class CRC32
    {
        private const int   WIDTH   = 32;
        private const ulong POLY    = 0x04C11DB7;
        private const ulong INIT    = 0xFFFFFFFF;
        private const ulong XOROUT  = 0xFFFFFFFF;
        private static readonly uint[] crctable = 
        {
            0x00000000,     0x77073096,     0xEE0E612C,     0x990951BA, 
            0x076DC419,     0x706AF48F,     0xE963A535,     0x9E6495A3, 
            0x0EDB8832,     0x79DCB8A4,     0xE0D5E91E,     0x97D2D988, 
            0x09B64C2B,     0x7EB17CBD,     0xE7B82D07,     0x90BF1D91, 
            0x1DB71064,     0x6AB020F2,     0xF3B97148,     0x84BE41DE, 
            0x1ADAD47D,     0x6DDDE4EB,     0xF4D4B551,     0x83D385C7, 
            0x136C9856,     0x646BA8C0,     0xFD62F97A,     0x8A65C9EC, 
            0x14015C4F,     0x63066CD9,     0xFA0F3D63,     0x8D080DF5, 
            0x3B6E20C8,     0x4C69105E,     0xD56041E4,     0xA2677172, 
            0x3C03E4D1,     0x4B04D447,     0xD20D85FD,     0xA50AB56B, 
            0x35B5A8FA,     0x42B2986C,     0xDBBBC9D6,     0xACBCF940, 
            0x32D86CE3,     0x45DF5C75,     0xDCD60DCF,     0xABD13D59, 
            0x26D930AC,     0x51DE003A,     0xC8D75180,     0xBFD06116, 
            0x21B4F4B5,     0x56B3C423,     0xCFBA9599,     0xB8BDA50F, 
            0x2802B89E,     0x5F058808,     0xC60CD9B2,     0xB10BE924, 
            0x2F6F7C87,     0x58684C11,     0xC1611DAB,     0xB6662D3D, 
            0x76DC4190,     0x01DB7106,     0x98D220BC,     0xEFD5102A, 
            0x71B18589,     0x06B6B51F,     0x9FBFE4A5,     0xE8B8D433, 
            0x7807C9A2,     0x0F00F934,     0x9609A88E,     0xE10E9818, 
            0x7F6A0DBB,     0x086D3D2D,     0x91646C97,     0xE6635C01, 
            0x6B6B51F4,     0x1C6C6162,     0x856530D8,     0xF262004E, 
            0x6C0695ED,     0x1B01A57B,     0x8208F4C1,     0xF50FC457, 
            0x65B0D9C6,     0x12B7E950,     0x8BBEB8EA,     0xFCB9887C, 
            0x62DD1DDF,     0x15DA2D49,     0x8CD37CF3,     0xFBD44C65, 
            0x4DB26158,     0x3AB551CE,     0xA3BC0074,     0xD4BB30E2, 
            0x4ADFA541,     0x3DD895D7,     0xA4D1C46D,     0xD3D6F4FB, 
            0x4369E96A,     0x346ED9FC,     0xAD678846,     0xDA60B8D0, 
            0x44042D73,     0x33031DE5,     0xAA0A4C5F,     0xDD0D7CC9, 
            0x5005713C,     0x270241AA,     0xBE0B1010,     0xC90C2086, 
            0x5768B525,     0x206F85B3,     0xB966D409,     0xCE61E49F, 
            0x5EDEF90E,     0x29D9C998,     0xB0D09822,     0xC7D7A8B4, 
            0x59B33D17,     0x2EB40D81,     0xB7BD5C3B,     0xC0BA6CAD, 
            0xEDB88320,     0x9ABFB3B6,     0x03B6E20C,     0x74B1D29A, 
            0xEAD54739,     0x9DD277AF,     0x04DB2615,     0x73DC1683, 
            0xE3630B12,     0x94643B84,     0x0D6D6A3E,     0x7A6A5AA8, 
            0xE40ECF0B,     0x9309FF9D,     0x0A00AE27,     0x7D079EB1, 
            0xF00F9344,     0x8708A3D2,     0x1E01F268,     0x6906C2FE, 
            0xF762575D,     0x806567CB,     0x196C3671,     0x6E6B06E7, 
            0xFED41B76,     0x89D32BE0,     0x10DA7A5A,     0x67DD4ACC, 
            0xF9B9DF6F,     0x8EBEEFF9,     0x17B7BE43,     0x60B08ED5, 
            0xD6D6A3E8,     0xA1D1937E,     0x38D8C2C4,     0x4FDFF252, 
            0xD1BB67F1,     0xA6BC5767,     0x3FB506DD,     0x48B2364B, 
            0xD80D2BDA,     0xAF0A1B4C,     0x36034AF6,     0x41047A60, 
            0xDF60EFC3,     0xA867DF55,     0x316E8EEF,     0x4669BE79, 
            0xCB61B38C,     0xBC66831A,     0x256FD2A0,     0x5268E236, 
            0xCC0C7795,     0xBB0B4703,     0x220216B9,     0x5505262F, 
            0xC5BA3BBE,     0xB2BD0B28,     0x2BB45A92,     0x5CB36A04, 
            0xC2D7FFA7,     0xB5D0CF31,     0x2CD99E8B,     0x5BDEAE1D, 
            0x9B64C2B0,     0xEC63F226,     0x756AA39C,     0x026D930A, 
            0x9C0906A9,     0xEB0E363F,     0x72076785,     0x05005713, 
            0x95BF4A82,     0xE2B87A14,     0x7BB12BAE,     0x0CB61B38, 
            0x92D28E9B,     0xE5D5BE0D,     0x7CDCEFB7,     0x0BDBDF21, 
            0x86D3D2D4,     0xF1D4E242,     0x68DDB3F8,     0x1FDA836E, 
            0x81BE16CD,     0xF6B9265B,     0x6FB077E1,     0x18B74777, 
            0x88085AE6,     0xFF0F6A70,     0x66063BCA,     0x11010B5C, 
            0x8F659EFF,     0xF862AE69,     0x616BFFD3,     0x166CCF45, 
            0xA00AE278,     0xD70DD2EE,     0x4E048354,     0x3903B3C2, 
            0xA7672661,     0xD06016F7,     0x4969474D,     0x3E6E77DB, 
            0xAED16A4A,     0xD9D65ADC,     0x40DF0B66,     0x37D83BF0, 
            0xA9BCAE53,     0xDEBB9EC5,     0x47B2CF7F,     0x30B5FFE9, 
            0xBDBDF21C,     0xCABAC28A,     0x53B39330,     0x24B4A3A6, 
            0xBAD03605,     0xCDD70693,     0x54DE5729,     0x23D967BF, 
            0xB3667A2E,     0xC4614AB8,     0x5D681B02,     0x2A6F2B94, 
            0xB40BBE37,     0xC30C8EA1,     0x5A05DF1B,     0x2D02EF8D
        };
        
        /// <summary>
        /// Hash a block of bytes.
        /// </summary>
        /// <param name="block"></param>
        /// <returns></returns>
        public static uint compute(byte[] block)
        {
            ulong c = INIT;
            int len = block.Length;
            int i = 0;
            while (len-- > 0)
            {
                c = crctable[(c ^ block[i++]) &amp; 0xFFL] ^ (c >> 8);
            }
            return (uint)(c ^ XOROUT);
        }
        /// <summary>
        /// Hash a string
        /// </summary>
        /// <param name="s"></param>
        /// <returns></returns>
        public static uint compute(string s)
        {
            return compute(System.Text.Encoding.ASCII.GetBytes(s));
        }
    }
}

   
     


This entry was posted in Security. Bookmark the permalink.