Hallo,
ich hab sehr viele Seiten gefunden zum Thema Verschlüsselung. Allerdings suche ich nach einer Methode, mit der ich unkompliziert (braucht nicht sehr sicher sein) einen String verschlüsseln kann. Es reicht schon aus, wenn der nicht mehr lesbar ist. Entschlüsseln muss ich den aber auch können.
Gibt es dafür in .net irgendwelche Klassen?
(außer hash, md5 & co)
Warum keine Hashes?
Das einfachste ist dabei wirklich MD5/SHA1 in verbindung mit
System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(Password, "MD5"))
Sry, hab mich falsch ausgedrückt.
Das ist's was ich suche. Danke.
Wie entschlüssele ich den String dann wieder?
Hallo,
Original von aime2code
Wie entschlüssele ich den String dann wieder?
Gar nicht. Weitere Ausführen dazu findest du in Wikipedia o.ä.
Zum Verschlüsseln von Strings findest du viele fertige Klassen & Tutorials, die mit AES (bereits enthalten) zusammenarbeiten.
Einfach mal die Suchmaschine deines Vertrauens bemühen
Ich hab doch oben geschrieben, dass ich den String auch wieder entschlüsseln möchte. Was nützt mir es ihn nur zu verschlüsseln? ?(
Für Verschlüsselung bietet .NET Implementierungen der gängigen Algorithmen, die du im Namespace System.Security.Cryptography findest. Weiter Informationen darüber findest du in der MSDN.
btw. Hash != Verschlüsselung
Irgendwie neigen die Menschen in diesem Forum dazu mit Kanonen auf Spatzen zu schießen. Er wollte was einfaches und ihr kommt gleich mit AES. 😉😜
Schau dir mal ROT13 an.
Das dürfte nicht schwer zu implementieren sein.
Gruss
tscherno
ich habe für mein aktuelles projekt auch einen weg gesucht um einen string schwerleserlich zu machen^^
es geht um den versionsvergleich zweier textadteien die dumerweise auch durch nichtwissende oder andersweitig unmögliche personen bearbetiet werden können
um solche dinge in gewisser weis zu erkenen (und auch zu wissen in welchen bereich der textdatei eine unerwünschte veränderunge durchgeführt wurde hab ich folgendes gemacht:
einen string der die öffentliche versionsnummer und den dateinamen enthält
bsp: "V1002resourcen.txt"
und dan die anzahl der zeilen eines bereiches (zeicehn kommt noch hinzu)
bsw: "192|123|2|1003"
nun werden alle zeichen nach char konvertiert und der buchstaben wert (also die zahl) *2 ein paar zahlen vertaushct mit andenr zahlen (so in richtung cä#sarverschlüselung wo zeiceh nverschoben werden usw)
bsw: wird r = 114 = 228 = 552 und auf 5 stellen afgefühlt 00552
die anzahl der zeilen in den bereicn werden nicht in char umgewandelt unw sondern es wird driekt mit ihnen gerechnet und vertauscht
der stinrg wird in die datei gespeicehrt und beim einlesen überprüft.
es ist etwas recht einfaches aber es funktiniert. und nur weil man einen unbermekten änderungensversuch machen will wird man nicht den schlüssel umrechnern und ändern^^
MfG Paul
@aime2code:
Sorry, hatte nach "Es reicht schon aus, wenn der nicht mehr lesbar ist" aufgehört zu lesen.
Wofür/Wo benötigst du diesen String?
Wenn du ihn in das Config-File schreiben willst, verschlüssele doch die ConfigSection,
das ist einfacher.
Ansonsten gibt es hier im Forum, bei codeproject und anderen Seiten so viele
beispiele zur einfachen verschlüsselung....
@tscherno:
Was ist wohl einfacher, eine vorhandene Verschlüsselun g zu benutzen, oder eine
andere neu zu schreiben?
Ich will User+PW verschlüsselt in einer Datei speichern (am besten binär).
Am besten wäre eine Funktion, wo ich ein Key eingebe und die mir einen String liefert. Sollte aber auch andersrum gehen.
Ich könnte mir schon selber was schreiben, aber das kostet halt Zeit.
Sicherheit spielt keine so große Rolle. Das PW sollte aber schon nicht leserlich sein.
Hallo aime2code,
für genau den gleichen Fall habe ich mir das Passwort in einer Textdatei mit "Base64 übersetzen" lassen.
Das ist lediglich ein anderes Encoding, und kann in der Textdatei so also nicht gelesen werden (Sicherheit = 0, jeder HobbyCracker kapiert das binnen Sekunden), aber es ist so nicht lesbar.
Und hier steht wie mans macht:
Base64 En- / Decoding
Grüße
Norman-Timo
A: “Wie ist denn das Wetter bei euch?”
B: “Caps Lock.”
A: “Hä?”
B: “Na ja, Shift ohne Ende!”
Wenn du's ganz einfach haben willst, machst du aus jedem Buchstaben des Strings irgendwas anderes, wie zb ASCII-Code oder Binärzahlen etc.(die Methoden gibts ja) und beim einlesen das ganze wieder rückwärts. Auch praktisch keine Sicherheit, aber wenn die Leute, die da dran kommen, mit Text a lá "101010001110101001101010101" nichts anfangen können, ist ja alles klar 🙂
mfg, Rasta
Sogar meine Mailadresse ist .NET 🙂
Oder du verwendest ein One-Time-Pad.
Gruss
tscherno
@norman_timo
Ich glaub das wird mir ausreichen. Danke. Endlich eine einfache Lösung.
So ists doch richtig, oder?
(aus einem Post kopiert)
public string Encode(string str)
{
byte[] encbuff = System.Text.Encoding.UTF8.GetBytes(str);
return Convert.ToBase64String(encbuff);
}
public string Decode(string str)
{
byte[] decbuff = Convert.FromBase64String(str);
return System.Text.Encoding.UTF8.GetString(decbuff);
}
Hallo aime2code,
ich denke dass das so richtig ist. Aber ich gehe mal stark davon aus, dass Du es ausprobierst, da wirst Du es ja sehen 😉
Grüße
Norman-Timo
A: “Wie ist denn das Wetter bei euch?”
B: “Caps Lock.”
A: “Hä?”
B: “Na ja, Shift ohne Ende!”
Hey. Ich brauche diese Funktion auch. Ich muss das verschlüsselte Passwortin eine INI Datei schreiben. Leider bekomme ich immer einen Fehler, wenn ich das verschlüsselte Passwort in die INI schreiben will.
Error 1 Cannot implicitly convert type 'byte[]' to 'string'
MfG spoochie
Hallo spoochie,
ich verwende meistens das hier um strings zu verschlüsseln
/// <summary>
/// Diese Methode verschlüsselt den mitgegebenen String
/// </summary>
/// <param name="plainMessage">Zu verschlüsselnder String</param>
/// <param name="password">Passwort mit dem der String verschlüsselt werden soll</param>
/// <returns>Den verschlüsselten String</returns>
public 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);
}
/// <summary>
/// Diese Methode entschlüsslt den mitgegebenen String
/// </summary>
/// <param name="encryptedBase64">zu entschlüsselnder string</param>
/// <param name="password">Passwort mit dem der String verschlüsselt wurde</param>
/// <returns>Den entschlüsslten string</returns>
public 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);
}
Dabei kannst du den String mit einem Passwort verschlüsseln und mit dem selben wieder entschlüsseln.
Ich hoffe dass das ist, was du gesucht hast
mfg
MichlG
Vielen Dank Michi, aber das ist so kompliziert, ich wollte das so machen.
public string Encode(string str)
{
byte[] encbuff = System.Text.Encoding.UTF8.GetBytes(str);
return Convert.ToBase64String(encbuff);
}
public string Decode(string str)
{
byte[] decbuff = Convert.FromBase64String(str);
return System.Text.Encoding.UTF8.GetString(decbuff);
}
Nur wie gesagt, kann ich mein verschlüsseltes Passwort leide rnicht in meine Datei schreiben. Er gibt den von mir bereits geposteten Fehler aus.
Mein Code zum codieren und in die Datei zu schreiben.
string pwencrypt = textBox2.Text;
byte[] encbuff = System.Text.Encoding.UTF8.GetBytes(pwencrypt);
Convert.ToBase64String(encbuff);
string[] inipw = ini[2].Split('=');
inipw[1] = encbuff;
ini[2] = inipw[0] + "=" + inipw[1];
inipw[1] = encbuff;
da bekomme ich den fehler. Ich kann dieses encbuff nicht in mein Array schreiben, um es dann in die ini zu schreiben.
MfG spoochie
Hallo spoochie,
die Exception bekommst du weil du versuchst einen Byte[] in einen string zu schreiben. Und das geht nicht ohne Konvertierung.
inipw[1] = encbuff;
// string <- byte[]
Ich habe gesehen, dass du das hier gemacht hast....
Convert.ToBase64String(encbuff);
... und das hier bringt dir gar nichts, da du den neuen Wert keiner Variable zuweist
deshalb kannst du das Problem am einfachsten Lösen, wenn du das hier so umänderst
inipw[1] = encbuff;
//In das hier umändern
inipw[1] = Convert.ToBase64String(encbuff);
Gruss
MichlG
Danke das klappt soweit. Jetzt habe ich das geliche Problem beim decrypten.
string[] inipw = ini[2].Split('-');
string encpw = inipw[1];
byte[] decbuff = Convert.FromBase64String(encpw);
System.Text.Encoding.UTF8.GetString(decbuff);
inipw[1] = decbuff;
Kannste mir da nochmal behilflich sein?
Vielen Dank spoochie
Hallo spocchie,
hier hast du genau den gleichen Fehler
das hier....
string[] inipw = ini[2].Split('-');
string encpw = inipw[1];
byte[] decbuff = Convert.FromBase64String(encpw);
inipw[1] = System.Text.Encoding.UTF8.GetString(decbuff);
...anstatt dem....
string[] inipw = ini[2].Split('-');
string encpw = inipw[1];
byte[] decbuff = Convert.FromBase64String(encpw);
System.Text.Encoding.UTF8.GetString(decbuff);
inipw[1] = decbuff;
das müsste so funktionieren...
mfg
MichlG