Laden...

String einfach verschlüsseln

Erstellt von aime2code vor 16 Jahren Letzter Beitrag vor 16 Jahren 50.615 Views
A
aime2code Themenstarter:in
49 Beiträge seit 2007
vor 16 Jahren
String einfach verschlüsseln

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)

F
10.010 Beiträge seit 2004
vor 16 Jahren

Warum keine Hashes?

Das einfachste ist dabei wirklich MD5/SHA1 in verbindung mit


System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(Password, "MD5"))
A
aime2code Themenstarter:in
49 Beiträge seit 2007
vor 16 Jahren

Sry, hab mich falsch ausgedrückt.
Das ist's was ich suche. Danke.
Wie entschlüssele ich den String dann wieder?

A
138 Beiträge seit 2007
vor 16 Jahren

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

A
aime2code Themenstarter:in
49 Beiträge seit 2007
vor 16 Jahren

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? ?(

664 Beiträge seit 2005
vor 16 Jahren

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

630 Beiträge seit 2007
vor 16 Jahren

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

To understand recursion you must first understand recursion

http://www.ilja-neumann.com
C# Gruppe bei last.fm

E
395 Beiträge seit 2007
vor 16 Jahren

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

F
10.010 Beiträge seit 2004
vor 16 Jahren

@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?

A
aime2code Themenstarter:in
49 Beiträge seit 2007
vor 16 Jahren

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.

4.506 Beiträge seit 2004
vor 16 Jahren

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!”

R
258 Beiträge seit 2007
vor 16 Jahren

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 🙂

630 Beiträge seit 2007
vor 16 Jahren

Oder du verwendest ein One-Time-Pad.

Gruss
tscherno

To understand recursion you must first understand recursion

http://www.ilja-neumann.com
C# Gruppe bei last.fm

A
aime2code Themenstarter:in
49 Beiträge seit 2007
vor 16 Jahren

@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);
}
4.506 Beiträge seit 2004
vor 16 Jahren

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!”

A
aime2code Themenstarter:in
49 Beiträge seit 2007
vor 16 Jahren

Hab ich ja schon. 🙂

S
155 Beiträge seit 2007
vor 16 Jahren

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

3.430 Beiträge seit 2007
vor 16 Jahren

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

S
155 Beiträge seit 2007
vor 16 Jahren

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

3.430 Beiträge seit 2007
vor 16 Jahren

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

S
155 Beiträge seit 2007
vor 16 Jahren

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

3.430 Beiträge seit 2007
vor 16 Jahren

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

S
155 Beiträge seit 2007
vor 16 Jahren

Jupp danke funzt! =)

MfG spoochie