Verschlüsselung mit C#

aquasonic

Erfahrenes Mitglied
Guten morgen,

ich habe eine Frage, und zwar handeln es sich dabei um eine Verschlüsselung von Passwörtern. Gibt es in C# auch eine Funktion die einen String verschlüsseltn (wie z.B. md5() in PHP). Jedoch sollte es auch möglich sein der Verschlüsselten String wieder zurückzusetzten (wieder das Original erhalten).

Gibt es sowas in C#? Oder hat jemand eine gute Verschlüsselung selber gemacht welche ich brauchen könnte? :)
 

Norbert Eder

Erfahrenes Mitglied
Vielleicht hilft dir das weiter:

Code:
private void HashMD5_Click(object sender, System.EventArgs e)
{
	Chilkat.Crypt crypt = new Chilkat.Crypt();
	crypt.UnlockComponent("TempCode");

	// Generate some byte data.
	byte[] inData = new byte[1000];
	int i;
	for (i=0; i<1000; i++)
	{
		inData[i] = Convert.ToByte(i % 255);
	}

	// Create an MD5 hash.
	byte[] hash = crypt.DigestMD5(inData);

	// We cannot display binary data, so convert it
	// to Base64 and display.
	textBox1.Text = crypt.EncodeBase64(hash);
}

mfg
Nitro
 

aquasonic

Erfahrenes Mitglied
Soviel ich bis jetzt bitbekommen habe ist Chilkat eine ActiveX-Komponente welche auf dem Server isntalliert sein muss?! Ich kann da aber leider nichts installieren... :(
 

aquasonic

Erfahrenes Mitglied
Ich konnte es mit folgenden Methoden lösen:

PHP:
public static string EncryptMessage(string plainMessage, string password)
		{
			TripleDESCryptoServiceProvider des = new TripleDESCryptoServiceProvider();
			des.IV = new byte[8];
			PasswordDeriveBytes pdb = new PasswordDeriveBytes(password, new byte[0]);
			des.Key = pdb.CryptDeriveKey("RC2", "MD5", 128, new byte[8]);
			MemoryStream ms = new MemoryStream(plainMessage.Length * 2);
			CryptoStream encStream = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write);
			byte[] plainBytes = Encoding.UTF8.GetBytes(plainMessage);
			encStream.Write(plainBytes, 0, plainBytes.Length);
			encStream.FlushFinalBlock();
			byte[] encryptedBytes = new byte[ms.Length];
			ms.Position = 0;
			ms.Read(encryptedBytes, 0, (int)ms.Length);
			encStream.Close();
			return Convert.ToBase64String(encryptedBytes);
		}
		
		public static string DecryptMessage(string encryptedBase64, string password)
		{
			TripleDESCryptoServiceProvider des = new TripleDESCryptoServiceProvider();
			des.IV = new byte[8];
			PasswordDeriveBytes pdb = new PasswordDeriveBytes(password, new byte[0]);
			des.Key = pdb.CryptDeriveKey("RC2", "MD5", 128, new byte[8]);
			byte[] encryptedBytes = Convert.FromBase64String(encryptedBase64);
			MemoryStream ms = new MemoryStream(encryptedBase64.Length);
			CryptoStream decStream = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write);
			decStream.Write(encryptedBytes, 0, encryptedBytes.Length);
			decStream.FlushFinalBlock();
			byte[] plainBytes = new byte[ms.Length];
			ms.Position = 0;
			ms.Read(plainBytes, 0, (int)ms.Length);
			decStream.Close();
			return Encoding.UTF8.GetString(plainBytes);
		}

Vielen Dank trotzdem für deine Antowort :)
 

XChris

Erfahrenes Mitglied
beispiel

Hallo:

Hier ist nen Ausführlicher beitrag zur Verschlüßelung von dot.Net in Deutsch:

SDH

Chris
 

MichiStroi

Erfahrenes Mitglied
Folgende Klasse liefert exakt das selbe Ergebnis wie die php Methode:

php:
Code:
md5($passwort)

c#
Code:
public static string MD5(string password) {
      byte[] textBytes = System.Text.Encoding.Default.GetBytes(password);
      try {
           System.Security.Cryptography.MD5CryptoServiceProvider cryptHandler;
           cryptHandler = new System.Security.Cryptography.MD5CryptoServiceProvider();
           byte[] hash = cryptHandler.ComputeHash (textBytes);
           string ret = "";
           foreach (byte a in hash) {
                if (a<16)
                     ret += "0" + a.ToString ("x");
                else
                     ret += a.ToString ("x");
           }
           return ret ;
      }
      catch {
           throw;
      }
}

mfg
Michi