Kategorie-Archiv: C#

C#, CSharp -Tipps und Tricks

C# Hashfunktion MD5 und SHA1

Zur Berechnung des MD5 und des SHA1 Hashes in C# bedient man sich des “System.Security.Cryptography” Namespaces.

Quellcode C# MD5:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/// <summary>
/// Liefert den MD5 Hash 
/// </summary>
/// <param name="input">Eingabestring</param>
/// <returns>MD5 Hash der Eingabestrings</returns>
private string getMD5(string input)
{
    //Umwandlung des Eingastring in den MD5 Hash
    System.Security.Cryptography.MD5 md5 = new System.Security.Cryptography.MD5CryptoServiceProvider();
    byte[] textToHash = Encoding.Default.GetBytes(input);
    byte[] result = md5.ComputeHash(textToHash);
 
    //MD5 Hash in String konvertieren
    System.Text.StringBuilder s = new System.Text.StringBuilder();
    foreach (byte b in result)
    {
        s.Append(b.ToString("x2").ToLower());
    }
 
    return s.ToString();
}

Quellcode C# SHA1:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/// <summary>
/// Liefert den SHA1 Hash 
/// </summary>
/// <param name="input">Eingabestring</param>
/// <returns>SHA1 Hash der Eingabestrings</returns>
private string getSHA1(string input)
{
    //Umwandlung des Eingastring in den SHA1 Hash
    System.Security.Cryptography.SHA1 sha1 = new System.Security.Cryptography.SHA1CryptoServiceProvider();
    byte[] textToHash = Encoding.Default.GetBytes(input);
    byte[] result = sha1.ComputeHash(textToHash);
 
    //SHA1 Hash in String konvertieren
    System.Text.StringBuilder s = new System.Text.StringBuilder();
    foreach (byte b in result)
    {
        s.Append(b.ToString("x2").ToLower());
    }
 
    return s.ToString();
}

Grundlegend sind die beiden Methoden gleich.

C# INI File lesen

In diesem Beispiel wird das Auslesen einer INI-Datei gezeigt. Hier erst mal der Inhalt der INI-Datei:

1
2
3
[Option]
Farbe=blau
Name=Hans

Der Quellcode:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
using System.Runtime.InteropServices;
using System.IO;
 
[DllImport("kernel32")]
private static extern int GetPrivateProfileString(string section,
string key, string def, StringBuilder retVal, int size, string filePath);
 
public string GetString(string section, string key)
{
const int size = 255;
      string file = Environment.CurrentDirectory + "\\test.INI";
      string def = "";
 
      StringBuilder sb = new StringBuilder(size);
      GetPrivateProfileString(section, key, def, sb, size, file);
 
      return sb.ToString();
}

Auslesen des Schlüssels “Farbe” aus der Sektion “Options”:

1
2
string[] args;
args = new string[] {GetString("Options", "Farbe")};

C# ByteArray-To-Image

Folgende Beispiel-Methode konvertiert Bilddaten, die als Bytearray abgelegt wurden in das Imageformat Bitmap oder Metafile. Kann in Verbindung mit der Klasse System.Windows.Forms.PictureBox verwendet werden.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public System.Drawing.Image ByteArrayToImage(byte[] byteArray) 
{
try
      {
      	System.IO.MemoryStream ms = new System.IO.MemoryStream(
                                                          byteArray, 0, 
                                                          byteArray.Length);
        ms.Write(byteArray, 0, byteArray.Length);
        return System.Drawing.Image.FromStream(ms, true);
      }
catch
      {                
            return null;
      }            
}

Multithreading in C# 2005

Synchrone Thread-Programmierung
Verwendeter Namespace: System.Threading

Zuerst erfolgt die Deklaration der Thread-Variablen.

1
2
3
4
/// <summary>
/// Variable für den Thread.
/// </summary>
protected Thread trd;

Nun wird eine neue Instanz des Threads angelegt und die aufzurufende Methode übergeben. Danach wird der Thread gestartet.

1
2
this.trd = new Thread(<Methodenname>);
this.trd.Start();

Die aufgerufene Methode beinhaltet das Beenden des Threads, nachdem der Programmcode abgearbeitet wurde.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
private void Methodenname()
{
   try
   {
     //Programmcode
   }
   catch (Exception ex)
   {
      ...
   }
 
   // Thread beenden
   Thread.CurrentThread.Abort();               
}

C# – Dokumentationskommentare –

Mit dem <list>-Tag kann man eine Tabelle im Dokumentationskommentar definieren. Der listheader gibt die Überschriftszeile für die Definitionsliste, Tabelle oder Aufzählung an. Eine solche Liste kann beliebig viele items beinhalten.

Syntax

<list type="bullet" | "number" | "table">
   <listheader>
      <term>term</term>
      <description>description</description>
   </listheader>
   <item>
      <term>term</term>
      <description>description</description>
   </item>
</list>
 

Beispiel

/// <list type="table">
/// <item>
///	 <term>true</term
///	 <description>falls Aktion erfolgreich läuft</description>
/// </item>
/// <item>
/// 	 <term>false</term>
///	 <description>falls Nutzer abbrechen möchte </description>
/// </item>
/// </list>