Mega Code Archive

 
Categories / C# / Security
 

Return the checksum of the buffer

// crudwork // Copyright 2004 by Steve T. Pham (http://www.crudwork.com) // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with This program.  If not, see <http://www.gnu.org/licenses/>. using System; using System.Collections.Generic; using System.Text; using System.IO; namespace crudwork.Utilities {   /// <summary>   /// Math Utility   /// </summary>   public static class MathUtil   {     /// <summary>     /// Return the checksum of the buffer     /// </summary>     /// <param name="buffer"></param>     /// <returns></returns>     public static long ComputeChecksum(byte[] buffer)     {       return ComputeChecksum(buffer, 0);     }     /// <summary>     /// Return the checksum of the buffer at the given offset     /// </summary>     /// <param name="buffer"></param>     /// <param name="offset"></param>     /// <returns></returns>     public static long ComputeChecksum(byte[] buffer, int offset)     {       long sum = 0;       for (int i = 0; i < buffer.Length; i++)       {         sum += buffer[i] * (i + 1 + offset);       }       return sum;     }     /// <summary>     /// Return the checksum value of the given filename     /// </summary>     /// <param name="filename"></param>     /// <returns></returns>     public static long ComputeChecksum(string filename)     {       //byte[] buffer = FileUtil.ReadFile(filename, 4096);       //return ComputeChecksum(buffer);       long sum = 0;       int bufSize = 4096;       using (FileStream fs = new FileStream(filename, FileMode.Open, FileAccess.Read))       using (BinaryReader r = new BinaryReader(fs))       {         byte[] readChar = null;         int offset = 0;                  do         {           readChar = r.ReadBytes(bufSize);           sum += ComputeChecksum(readChar, offset);           offset += readChar.Length;         } while ((readChar != null) && (readChar.Length > 0));         r.Close();         //fs.Close();       }       return sum;     }   } }