Feedback

C# - HashableElement

Veröffentlicht von am 31.01.2008
(1 Bewertungen)
Hier mal ne kleine Klasse die als Denkanstoß dienen soll wie man eine klasse hashen kann,
mit Hilfe des MD5Ignore Attributes kann man einfach die Property aus der Hashwerterstellung rausnehmen.
Exemplarisch wird hier die Version aus der Hasherstellung rausgenommen.
using System;
using System.Collections.Generic;
using System.Text;
using System.Reflection;
using System.Security.Cryptography;

namespace DotNetSnippets
{
    internal class MD5Ignore : System.Attribute
    {
    }
    
    internal class HashableElement
    {
        private Guid id;
        private DateTime creation;
        private string user;
        private string currentValue;
        private Version version;

        public HashableElement()
        {

        }
        /// <summary>
        /// Beschreibung: 
        /// </summary>
        [MD5Ignore]
        public Version Version
        {
            get
            {
                return version;
            }
            set
            {
                version = value;
            }
        }
	

        /// <summary>
        /// Beschreibung: 
        /// </summary>
        public string Value
        {
            get
            {
                return currentValue;
            }
            set
            {
                currentValue = value;
            }
        }
	

        /// <summary>
        /// Beschreibung: 
        /// </summary>
        public string User
        {
            get
            {
                return user;
            }
            set
            {
                user = value;
            }
        }
	

        /// <summary>
        /// Beschreibung: 
        /// </summary>
        public DateTime Creation
        {
            get
            {
                return creation;
            }
            set
            {
                creation = value;
            }
        }
	

        /// <summary>
        /// Beschreibung: 
        /// </summary>
        public Guid Id
        {
            get
            {
                return id;
            }
            set
            {
                id = value;
            }
        }

        internal string GetCheckSum()
        {
            List<PropertyInfo> properties = new List<PropertyInfo>(this.GetType().GetProperties());
            List<PropertyInfo> validProperties = new List<PropertyInfo>(properties.FindAll(delegate(PropertyInfo any)
            {
                return (any.GetCustomAttributes(typeof(MD5Ignore), true).Length == 0);
            }));
            string checkSumBase = string.Empty;
            foreach (PropertyInfo pInfo in validProperties)
            {
                checkSumBase += String.Format("{0} / ",pInfo.GetValue(this, null).ToString());
            }



            byte[] data = MD5.Create().ComputeHash(Encoding.UTF8.GetBytes(checkSumBase));

            StringBuilder sBuilder = new StringBuilder();

            for (int i = 0; i < data.Length; i++)
            {
                sBuilder.Append(data[i].ToString("x2"));
            }

            return sBuilder.ToString();
      
         

        }

        private string GetMd5Salt()
        {
            return "exampleSalt";
        }
	
    }
}

Abgelegt unter MD5, Checksum, ComputeHash, Attribute.

Kommentare zum Snippet

 

Logge dich ein, um hier zu kommentieren!