Mercurial > silverbladetech
diff Chronosv2/source/Extensions/ArrayExtensions.cs @ 10:443821e55f06
Initial cleaned up add from Codeplex files
author | stevenh7776 stevenhollidge@hotmail.com |
---|---|
date | Tue, 21 Feb 2012 17:25:44 +0700 |
parents | |
children | 09d18d6e5f40 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Chronosv2/source/Extensions/ArrayExtensions.cs Tue Feb 21 17:25:44 2012 +0700 @@ -0,0 +1,146 @@ +/* + Copyright (c) 2008 - 2009, Carlos Guzmán Álvarez + + All rights reserved. + + Redistribution and use in source and binary forms, with or without modification, + are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation and/or + other materials provided with the distribution. + * Neither the name of the author nor the names of its contributors may be used to endorse or + promote products derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +using System; +using System.Security.Cryptography; +using System.Text; + +namespace Chronos.Extensions +{ + /// <summary> + /// Extension methods + /// </summary> + public static class ArrayExtensions + { + #region · Extensions · + + /// <summary> + /// Converts a given byte array to a base-64 string + /// </summary> + /// <param name="buffer"></param> + /// <returns></returns> + public static string ToBase64String(this byte[] buffer) + { + return Convert.ToBase64String(buffer); + } + + /// <summary> + /// Computes the MD5 hash of a given byte array + /// </summary> + /// <param name="buffer"></param> + /// <returns></returns> + public static byte[] ComputeMD5Hash(this byte[] buffer) + { + MD5 md5 = MD5.Create(); + md5.TransformFinalBlock(buffer, 0, buffer.Length); + + return md5.Hash; + } + + /// <summary> + /// Computes the SHA1 hash of a given byte array + /// </summary> + /// <param name="buffer"></param> + /// <returns></returns> + public static byte[] ComputeSHA1Hash(this byte[] buffer) + { + SHA1 hashAlgorithm = SHA1.Create(); + hashAlgorithm.TransformFinalBlock(buffer, 0, buffer.Length); + + return hashAlgorithm.Hash; + } + + /// <summary> + /// Computes the MD5 hash of a given array of strings + /// </summary> + /// <param name="buffer"></param> + /// <returns></returns> + public static byte[] ComputeMD5Hash(this string[] values) + { + MD5 hashAlgorithm = MD5.Create(); + + foreach (string value in values) + { + if (value != null) + { + byte[] buffer = Encoding.UTF8.GetBytes(value); + byte[] output = new byte[buffer.Length]; + int count = hashAlgorithm.TransformBlock(buffer, 0, buffer.Length, output, 0); + } + } + + hashAlgorithm.TransformFinalBlock(new byte[0], 0, 0); + + return hashAlgorithm.Hash; + } + + /// <summary> + /// Computes the SHA1 hash of a given array of strings + /// </summary> + /// <param name="buffer"></param> + /// <returns></returns> + private static byte[] ComputeSHA1Hash(this string[] values) + { + SHA1 hashAlgorithm = SHA1.Create(); + + foreach (string value in values) + { + if (value != null) + { + byte[] buffer = Encoding.UTF8.GetBytes(value); + byte[] output = new byte[buffer.Length]; + int count = hashAlgorithm.TransformBlock(buffer, 0, buffer.Length, output, 0); + } + } + + hashAlgorithm.TransformFinalBlock(new byte[0], 0, 0); + + return hashAlgorithm.Hash; + } + + /// <summary> + /// Convert a byte array to an hex string + /// </summary> + /// <param name="buffer"></param> + /// <returns></returns> + public static string ToHexString(this byte[] buffer) + { + StringBuilder hex = new StringBuilder(); + + for (int i = 0; i < buffer.Length; i++) + { + hex.Append(buffer[i].ToString("x2")); + } + + return hex.ToString(); + } + + #endregion + } +}