Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
String einfach verschlüsseln
aime2code
myCSharp.de - Member



Dabei seit:
Beiträge: 50

Themenstarter:

String einfach verschlüsseln

beantworten | zitieren | melden

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)
private Nachricht | Beiträge des Benutzers
FZelle
myCSharp.de - Experte



Dabei seit:
Beiträge: 10083

beantworten | zitieren | melden

Warum keine Hashes?

Das einfachste ist dabei wirklich MD5/SHA1 in verbindung mit


System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(Password, "MD5"))
private Nachricht | Beiträge des Benutzers
aime2code
myCSharp.de - Member



Dabei seit:
Beiträge: 50

Themenstarter:

beantworten | zitieren | melden

Sry, hab mich falsch ausgedrückt.
Das ist's was ich suche. Danke.
Wie entschlüssele ich den String dann wieder?
private Nachricht | Beiträge des Benutzers
Andavos
myCSharp.de - Member



Dabei seit:
Beiträge: 138

beantworten | zitieren | melden

Hallo,
Zitat
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
private Nachricht | Beiträge des Benutzers
aime2code
myCSharp.de - Member



Dabei seit:
Beiträge: 50

Themenstarter:

beantworten | zitieren | melden

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? ?(
private Nachricht | Beiträge des Benutzers
langalaxy
myCSharp.de - Member

Avatar #avatar-1914.gif


Dabei seit:
Beiträge: 664

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
tscherno
myCSharp.de - Member

Avatar #avatar-2584.gif


Dabei seit:
Beiträge: 637
Herkunft: Nürnberger Land

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
el_panter
myCSharp.de - Member



Dabei seit:
Beiträge: 406
Herkunft: Sömmerda

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
FZelle
myCSharp.de - Experte



Dabei seit:
Beiträge: 10083

beantworten | zitieren | melden

@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?
private Nachricht | Beiträge des Benutzers
aime2code
myCSharp.de - Member



Dabei seit:
Beiträge: 50

Themenstarter:

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
norman_timo
myCSharp.de - Member

Avatar #avatar-1775.jpeg


Dabei seit:
Beiträge: 4591
Herkunft: Wald-Michelbach (Odw)

beantworten | zitieren | melden

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!”
private Nachricht | Beiträge des Benutzers
Rasta
myCSharp.de - Member



Dabei seit:
Beiträge: 259

beantworten | zitieren | melden

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
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Rasta am .
Sogar meine Mailadresse ist .NET
private Nachricht | Beiträge des Benutzers
tscherno
myCSharp.de - Member

Avatar #avatar-2584.gif


Dabei seit:
Beiträge: 637
Herkunft: Nürnberger Land

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
aime2code
myCSharp.de - Member



Dabei seit:
Beiträge: 50

Themenstarter:

beantworten | zitieren | melden

@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);
}
private Nachricht | Beiträge des Benutzers
norman_timo
myCSharp.de - Member

Avatar #avatar-1775.jpeg


Dabei seit:
Beiträge: 4591
Herkunft: Wald-Michelbach (Odw)

beantworten | zitieren | melden

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!”
private Nachricht | Beiträge des Benutzers
aime2code
myCSharp.de - Member



Dabei seit:
Beiträge: 50

Themenstarter:

beantworten | zitieren | melden

Hab ich ja schon.
private Nachricht | Beiträge des Benutzers
spoochie
myCSharp.de - Member



Dabei seit:
Beiträge: 156

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
michlG
myCSharp.de - Experte

Avatar #avatar-2909.png


Dabei seit:
Beiträge: 3652
Herkunft: Naturns - Südtirol - Italien

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
spoochie
myCSharp.de - Member



Dabei seit:
Beiträge: 156

beantworten | zitieren | melden

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
Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von spoochie am .
private Nachricht | Beiträge des Benutzers
michlG
myCSharp.de - Experte

Avatar #avatar-2909.png


Dabei seit:
Beiträge: 3652
Herkunft: Naturns - Südtirol - Italien

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
spoochie
myCSharp.de - Member



Dabei seit:
Beiträge: 156

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
michlG
myCSharp.de - Experte

Avatar #avatar-2909.png


Dabei seit:
Beiträge: 3652
Herkunft: Naturns - Südtirol - Italien

beantworten | zitieren | melden

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
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von michlG am .
private Nachricht | Beiträge des Benutzers
spoochie
myCSharp.de - Member



Dabei seit:
Beiträge: 156

beantworten | zitieren | melden

Jupp danke funzt! =)

MfG spoochie
private Nachricht | Beiträge des Benutzers