Rijndael Verschlüsselung über Forms und Konsolenanwendung

  • VB.NET

Es gibt 14 Antworten in diesem Thema. Der letzte Beitrag () ist von EaranMaleasi.

    Rijndael Verschlüsselung über Forms und Konsolenanwendung

    Juten Abend Leute ^^

    Ich habe einen Ver-/Entschlüsselungs code von Rijndael gefunden (benutze VB.Net) --> obviex.com/samples/Encryption.aspx
    Und nun habe ich so nach und nach gemerkt (spätestens bei
    "Console.WriteLine") dass der Code nur für wie Win32 KonsolenAnwendung
    ist.

    Nun habe ich diesen Code benutzt (In einer Konsolen
    Anwendung) und möchte jetzt in einer Win32.Forms Anwendung (Da über TCP
    komuniziert wird siehe hier ---> Multiserver-tcp )
    den Verschlüsselten String Entschlüsseln (habe das bsp. genommen) und dann sagt er mir beim Build FEHLER:

    RijndaelSimple ist nicht in einer Win32.Forms Anwendung verfübar/definiert oder so...

    Und ich weiß jetzt nicht wie ich diesen Verschlüsselten String wieder in einen Entschlüsselten String "Formatiere"


    Währe über Hilfe sehr erfreut... ^^
    Bellum et Pax.
    Omne initium est difficile.
    -KenJy ;D
    Ich gehe davon aus, dass du a) den Code einfach nur kopiert hast ohne ihn angeguckt zu haben, b) den Code nicht verstehst und c) nicht weißt wie die Rijndael-Verschlüsselung funktioniert ?

    Dann poste doch bitte mal die Function zum Encrypten / decrypten, und sage in welcher Zeile die Exception geworfen wird, und wie sie genau heißt.


    EDIT: Ich habe jetzt mal Copy&Paste gemacht: Läuft einwandfrei ;)
    »There's no need to "teach" atheism. It's the natural result of education without indoctrination.« — Ricky Gervais

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ThePlexian“ ()

    Hi
    laufen tut er vielleicht einwandfrei, aber er ist sozusagen eine hässliche Krücke. Strings für Daten sind eine hässliche Darstellung. Strings dienen der Darstellung, um etwas Menschen zu präsentieren, weil wir uns mit Binärwerten dann doch relativ hart tun ==> Es sind Zahlen, denen eine für uns Menschen begreifliche Semantik zugeordnet wurde. Daher verwendet man grundsätzlich Byte-Arrays. ASCII ist ein für .Net-Strings untaugliches Format ==> Unicode verwenden, das unterstützt alle Chars, da .Net-Strings ebenfalls als Unicode dargestellt werden. Es ist zudem Aufgabe des Aufrufers, die Eingabe in Bytes zu konvertieren. Normalerweise würde man vmtl. einfach einen Stream definieren (z.B. CryptoStream) und dann einen StreamWriter/-Reader drauflegen.
    An der Stelle habe ich bereits aufgehört, den Code durchzulesen.

    Gruß
    ~blaze~
    ich würde dir dringend ans Herz legen dich mal hiermit auseinander zu setzen: RijndaelManaged

    das ist ein einfaches Beispiel, wie man Rijndael anwendet aus der MSDN.

    aber ne frage, wenn du sagst, du willst verschlüsseln via TCP, dann brauchst du mehr als nur eine Symmetrische Verschlüsselung, immerhin kannste den Schlüssel ja nicht unverschlüsselt über die Leitung jagen, sonst kann ja jeder mitlesen der will.

    Tipp: Asymmetrische Verschlüsselung

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „EaranMaleasi“ ()

    @~blaze~

    Das habe ich ja auch garnicht in Frage gestellt.
    Ich sehe das ja genauso wie du, bzw. stimme dir eher zu.

    Nur wenn er sagt, dass eine Exception geworfen wird, und er als Code nur den Link (mehr oder weniger) angibt, dann gehe ich davon aus, dass dieser Code dann auch verwendet wurde. Folglich meine Aussage: Dieser Code, 1 zu 1 kopiert, funktioniert bei mir.
    Ob er nun gut oder schlecht ist, andere Sache :)
    »There's no need to "teach" atheism. It's the natural result of education without indoctrination.« — Ricky Gervais
    Okay... das Problem habe ich jetzt selbst beseitigen können (Flüchtigkeitsfehler...) Aber in wie fern Asyncrone Verschlüsselung? Dass das eine Programm mit der einen Verschlüßelung Verschlüßelt, und das Andere mit einer anderen Verschlüßelung? (Natürlich wird beim jeweiligen Anderen Programm die Entschlüsselung verwendet, mit der Verschlüsselt wurde)

    So etwar? Oder wie jetzt Asyncrone Verschlüsselung?
    Bellum et Pax.
    Omne initium est difficile.
    -KenJy ;D
    Nur zur Sicherheit, weil sich hier ein kleiner Flüchtigkeitsfehler eingeschlichen hat: Die Verschlüsselung ist nicht asynchron, sondern gemeint war "asymmetrisch".
    Asymmetrische Verschlüsselung bedeutet, dass der Schlüssel, mit dem verschlüsselt wird, ein anderer ist als der, mit dem das ganze wieder entschlüsselt wird. Zu einer asymmetrischen Verschlüsselung gehören also immer zwei Schlüssel, die voneinander abhängig sind, aber vom einen kann man nicht auf den anderen Schlüssel kommen. Was mit einem der beiden Schlüssel verschlüsselt wird, kann nur mit dem jeweils anderen Schlüssel wieder entschlüsselt werden. Da die beiden Schlüssel eines solchen Schlüsselpaars nie identisch sind, nennt man das ganze "asymmetrisch".
    Weltherrschaft erlangen: 1%
    Ist dein Problem erledigt? -> Dann markiere das Thema bitte entsprechend.
    Waren Beiträge dieser Diskussion dabei hilfreich? -> Dann klick dort jeweils auf den Hilfreich-Button.
    Danke.
    tut mir leid, mein Fehler :whistling:

    aber um dabei zu bleiben, du kannst zwar schon über Rijndael Verschlüsseln (ist sogar das bessere für einen shcnellen Datenverkehr) doch irgendwie musst du ja den Schlüssel zum anderen bekommen, ohne dass den jemand abfängt. und hier würde dann die Asymmetrische Verschlüsselung ins spiel kommen. hier hast du einen public und einen private key. der public verschlüsselt und der private entschlüsselt. nun kannst du die public keys froh munter austauschen und damit für den anderen partner verschlüsseln. dieser kann dann mit seinem private key das ganze dann lesen. so können angreifer, die sich irgendwo zwsichenschalten oder "nur" mitlesen, zwar den public key abfangen, aber damit auch nur dir verschlüsselte nachrichten schicken, mehr nicht. bedeutet dann für dich, du ermittelst wo sichdie beiden befinden, schickst jeweils den public key durchs netz, schickst dann verschlüsselt den Rijndael Schlüssel und IV zu dem anderen, und schon kanns losgehen.
    so viel zur Theorie^^
    Also damit ich es jetzt richtig Verstanden habe, sollte das ungefähr so ablaufen:

    Server Verschlüsselt mit Key1
    Client Entschlüsselt mit Key1

    Client Verschlüsselt mit Key2
    Server Entschlüsselt mit Key2
    So ungefähr?

    Und die Keys brauch ich ja nicht mit schicken, die sind im Programm mit eingebaut.
    Bellum et Pax.
    Omne initium est difficile.
    -KenJy ;D
    Fast.

    Server verschlüsselt mit Key1 -> Client entschlüsselt mit Key2
    Client verschlüsselt mit Key2 -> Server entschlüsselt mit Key1

    Der Sinn hinter Public-Key-Verfahren ist, dass maximal eine Instanz tatsächlich Kenntnis über beide Teile eines Schlüssel-Paars besitzt. Der bzw. sämtliche Kommunikationspartner kennen in der Regel ausschließlich einen der beiden Schlüssel (der aus diesem Grund auch "Public Key" genannt wird).
    Weltherrschaft erlangen: 1%
    Ist dein Problem erledigt? -> Dann markiere das Thema bitte entsprechend.
    Waren Beiträge dieser Diskussion dabei hilfreich? -> Dann klick dort jeweils auf den Hilfreich-Button.
    Danke.
    Davon mal abgesehen dass ich das nicht verstehe,
    wie soll das gehen?

    Wenn ich z.B. "Hallo" mit Key1 Verschlüssel (z.B. Test12376 <-- Key1) bekomme ich z.B. ueJXusnnexzu/jsn= (Stimmt nicht, aber jetzt nur als Bsp.) und mit Key2 das Verschlüsselte Entschlüssele (IchTschecksNet <-- Key2) bekomme ich doch was komplett anderes herraus, aber nicht "Hallo"

    Desswegen verstehe ich dass gerade nicht und weiß auch nicht wie dass mit dem Public Key gemeint ist...
    Bellum et Pax.
    Omne initium est difficile.
    -KenJy ;D
    also, der Server udn der Client haben jeweils 2 Schlüssel. einen public key, dieser kann nur nachrichtn verschlüsseln, und einen private key, dieser kann soweit ich weiß beides, wird aber eben nur zum entschlüsslen angewandt in unserem beispiel. damit beide sich verstehen (wollte man eine längere konversation der beiden via RSA) müssen beide den Public key des anderen haben, um für den anderen zu verschlüsseln. es würde aber theoretishc genügen, dass nur in eine richtung ein public key geschrieben wird um dann den schlüssel für Rijndael über RSA verschlüsselt zurück zu schicken.
    Ich kann dir nur raten, dir erst

    http://de.wikipedia.org/wiki/Public-Key-Verschlüsselungsverfahren

    und dann

    de.wikipedia.org/wiki/RSA-Verfahren

    zu Gemüte zu führen. Asymmetrische Verschlüsselung bzw. Kryptographie ist keine leichte Kost, aber das Grundprinzip wie private und public Key zusammenspielen sollte man schon verstehen wenn man damit arbeiten will...

    Nachtrag:
    Vielleicht ist dieses Beispiel etwas besser geeignet, das Grundprinzip mit einfachen Mitteln zu erklären.
    Nehmen wir an, du hast die Zeichenfolge "HALLO" (72 65 75 75 78) und verschlüsselst sie mit einem Verfahren, das derartige Berechnungen enthält, die man nicht umkehren kann. (Wenn du 3*12 rechnest kommt _immer_ 36 heraus, aber wenn du die 36 hast weißt du nicht ob sie aus 3:12 oder 6*6 oder 2*18 entstanden ist.)
    Nehmen wir der Einfachheit halber an, die Verschlüsselung sieht so aus, dass du den ASCII-Wert um einen gewissen Betrag N verschiebst. Die Verschiebung funktioniert - das ist die Voraussetzung - aber nur in eine Richtung, nicht zurück. Dein Schlüssel 1 hat beispielsweise den Wert 40. Also wird aus der Zeichenfolge die Sequenz 112 105 115 115 118.
    Wenn du jetzt den gleichen Schlüssel wieder darauf anwendest, bekommst du aber nicht HALLO raus. Du kannst das gleiche Verschlüsselungsverfahren sogar mehrmals anwenden, ohne den ursprünglichen Text herauszubekommen. (Spätestens nach dem 256. Mal klappt es aber, wenn man nach 255 wieder bei 0 anfängt - das ist der Einfachheit des Beispiels geschuldet.)
    Um den Text zu entschlüsseln, benutzt du das gleiche Verfahren, nur mit einem anderen Schlüssel -> der Schlüssel muss den Wert 216 haben. Du addierst also auf die verschlüsselten Werte nun nicht mehr 40, sondern 216, nimmst sie jeweils Modulo 256 und erhälst den ursprünglichen Text zurück. Und das obwohl du zwei unterschiedliche "Schlüssel" verwendet hast.

    So ähnlich funktioniert Public-Key-Verschlüsselung, nur dass dort die beiden Schlüssel eines Paars nicht so offensichtlich wie hier (X1 = 256 - X2) voneinander abhängig sind, sondern die Berechnung so angelegt ist, dass sie nur mit extrem(st) hohem Aufwand zurückgerechnet werden kann.
    Weltherrschaft erlangen: 1%
    Ist dein Problem erledigt? -> Dann markiere das Thema bitte entsprechend.
    Waren Beiträge dieser Diskussion dabei hilfreich? -> Dann klick dort jeweils auf den Hilfreich-Button.
    Danke.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Arby“ ()

    Ich verstehs nicht...! Wenn ich zwei verschiedene Schlüssel habe dann kann ich doch nicht meinen ursprungs Text zurück bekommen wenn ich so verschlüssele:

    Zitat von Arby:
    "
    Server verschlüsselt mit Key1 -> Client entschlüsselt mit Key2
    Client verschlüsselt mit Key2 -> Server entschlüsselt mit Key1
    "
    Weil wenn
    Key1 = VerstehIchNicht ist,
    und
    Key2 = EsKlingtUnlogisch ist,
    Dann wird der Text doch nicht wieder korrekt entschlüsseölt, weil ein völlig anderer Schlüsel benutzt wurde.

    Wieso kann man es nicht so machen:
    Server verschlüsselt mit Key1 -> Client entschlüsselt mit Key1
    Client verschlüsselt mit Key2 -> Server entschlüsselt mit Key2
    Programm dierekt mit einbauen kann?
    Bellum et Pax.
    Omne initium est difficile.
    -KenJy ;D
    das ist ja die Magie der Assymetrischen verschlüsselung :D
    also bei RSA z.B. gibt es praktisch gesehen 2 Komponennten. public und private. der private Key beinhaltet bereits den public key. sogesehen kann man sagen, dass der public key, nur den teil enthält, den man zum verschlüsseln benötigt, jedoch nicht denjenigen, der zum entschlüsseln notwendig ist.

    oder vielleicht etwas bildlich gesprochen, wir haben einen verschlüsselten text, eine art gleichung, mit etlichen unbekannten. mit dem private key, der alle unbekannten enthält, können wir diese Gleichung lösung lösen, die wir mit dem public key aufgestellt haben. (war vielleicht nicht der beste vergleich :S )

    Edit: hier mal ein Private und ein Public key. zusammen mit dem Wikipedia artikel dürfte es dann vielleicht sinn ergeben:

    RSA 512 private Key schrieb:

    <RSAKeyValue><Modulus>3wnB5gfTLAk9St6PKj90sujDC1EG+Qd8CRBgrCNBDaitDD1A3eRklUAFEGtTBnQBaBC5d4BrabChfjPKxe/sGQ==</Modulus><Exponent>AQAB</Exponent><P>/SzM1/ouN72Ew7inS94pOuSh8LMXOpQodMXi9A3a80U=</P><Q>4Ybe3pcRbwghOZuAGyr/1JYPpprzIyitDuX12xE3WMU=</Q><DP>91txHEdcJqus7okYM0Dw6ZB+RCzGMj6VNFovPqHW3T0=</DP><DQ>g8jkAv4T2eXORHNxcG63/+mQS7LP0QO73LDT8aclyGE=</DQ><InverseQ>Pwz2ZG4c1Wu8VeG1BXfWMDZ8iC8iXpA6PmkARm/F+tA=</InverseQ><D>BCNqNZpvkKGbQYhfn6kNwUQQWmVme7hn1MM5B/iffGFb8sjAiCuGWhPBkPyxpEF/u6fIOny2RD7MjtqhULdMAQ==</D></RSAKeyValue>

    RSA 512 public Key schrieb:

    <RSAKeyValue><Modulus>3wnB5gfTLAk9St6PKj90sujDC1EG+Qd8CRBgrCNBDaitDD1A3eRklUAFEGtTBnQBaBC5d4BrabChfjPKxe/sGQ==</Modulus><Exponent>AQAB</Exponent></RSAKeyValue>
    fällt was auf?

    natürlich musste das ganze in bytes denken

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „EaranMaleasi“ ()