Laden...

Md5Hasher

Erstellt von Jabi vor 16 Jahren Letzter Beitrag vor 16 Jahren 1.730 Views
J
Jabi Themenstarter:in
222 Beiträge seit 2006
vor 16 Jahren
Md5Hasher

edit: kleinen fehler ausgebessert 🙂

Da ich oftmals einen Md5 Hash von einem string brauche hab ich mir mal ganz fix ein kleinen Programm geschrieben das das für mcih erledigt....
Vielleicht können dies ja andere leute auch noch benötigen

Das Programm ist auch für Anfänger zum ansehen geeignet das ich
zu einem ein Eventmodel eingebaut habe

Sollten es die Admins es für gut befinden könnte man den Thread ja auch in die Faq geben für Events und Controls in Threads aktualisieren ....

delegates und EventArgs :


public delegate void HashFinishedEventHandler(object sender, HashFinishedEventArgs e);
    public class HashFinishedEventArgs : EventArgs
    {
        private string _hashedString;
        public string HashedString
        {
            get { return this._hashedString; }
            set { this._hashedString = value; }
        }
        public HashFinishedEventArgs(string HASHEDSTRING)
        {
            this._hashedString = HASHEDSTRING;
        }
    }
    public delegate void HashStartEventHandler(object sender, HashStartEventArgs e);
    public class HashStartEventArgs : EventArgs
    {
        private string _stringToHash;
        public string StringToHash
        {
            get { return this._stringToHash; }
            set { this._stringToHash = value; }
        }
        public HashStartEventArgs(string STRINGTOHASH)
        {
            this._stringToHash = STRINGTOHASH;
        }
    }
    public delegate void HashProgressPercetEventHandler(object sender, HashProgressPercetEventArgs e);
    public class HashProgressPercetEventArgs : EventArgs
    {
        private int _bytesHashed;
        public int BytesHashed
        {
            get { return this._bytesHashed; }
            set { this._bytesHashed = value; }
        }
        private int _bytesToHash;
        public int BytesToHash
        {
            get { return this._bytesToHash; }
            set { this._bytesToHash = value; }
        }
        public int PercentState
        {
            get { return Convert.ToInt32(Math.Round((double)((BytesHashed * 100) / BytesToHash), 0)); }
        }

        public HashProgressPercetEventArgs(int BYTESHASHED, int BYTESTOHASH)
        {
            this._bytesHashed = BYTESHASHED;
            this._bytesToHash = BYTESTOHASH;
        }
    }

einbau der Events in die Klasse :


#region Events
        public event HashStartEventHandler HashStart;
        internal virtual void OnHashStart(string strToHash)
        {
            if (this.HashStart != null)
            {
                this.HashStart(this, new HashStartEventArgs(strToHash));
            }
        }
        public event HashFinishedEventHandler HashFinished;
        internal virtual void OnHashFinished(string strHashedString)
        {
            if (this.HashFinished != null)
            {
                this.HashFinished(this, new HashFinishedEventArgs(strHashedString));
            }
        }
        public event HashProgressPercetEventHandler HashPercentState;
        internal virtual void OnHashPercentState(int BytesHashed, int BytesToHash)
        {
            if (this.HashPercentState != null)
            {
                this.HashPercentState(this, new HashProgressPercetEventArgs(BytesHashed, BytesToHash));
            }
        }
        #endregion

Verwendung des events:


public void Hash()
        {
            OnHashStart(StringToHash);
            string buffer = null;
            try
            {
                buffer = get_Md5HashString(StringToHash);
            }
            catch (Exception ex) { throw new Exception("Fehler beim hashen :\n" + ex.Message); }
            OnHashFinished(buffer);
        }

und zum anderem mit Threads in Windows Forms arbeite und dort auch die Controls in einem anderem Thread aktualisieren lasse.
delegate und Methode :


public class FormDelegates
    {
        //--------------------------------------------------------------------------------------------------
        private delegate string GetTextBoxTextDelegate(Form frm, TextBox txt);
        private static string _GetTextBoxText(Form frm, TextBox txt)
        {
            return txt.Text;
        }
        public static string GetTextBoxText(Form frm, TextBox txt)
        {
            return frm.Invoke(new GetTextBoxTextDelegate(_GetTextBoxText), new object[] { frm, txt }).ToString();
        }
        //--------------------------------------------------------------------------------------------------
}

Verwendung in der Form:


private void _DoWork()
        {
            FormDelegates.SetButtonEnabled(this, btnHash, false);
            FormDelegates.SetTextBoxText(this, txtHashed, "");
            FormDelegates.SetTextBoxEnabled(this, txtToHash, false);
            FormDelegates.SetProgressbarValue(this, pgrBarHashState, 0);
            Md5Hash md5 = new Md5Hash(FormDelegates.GetTextBoxText(this, txtToHash));
            md5.HashStart += new HashStartEventHandler(md5_HashStart);
            md5.HashPercentState += new HashProgressPercetEventHandler(md5_HashPercentState);
            md5.HashFinished += new HashFinishedEventHandler(md5_HashFinished);
            md5.Hash();
        }

        private void btnHash_Click(object sender, EventArgs e)
        {
            Thread worker = new Thread(_DoWork);
            worker.Start();
        }

Der komplette SourceCode ist dann im Anhang zu finden und ich hoffe es hilft einigen leuten