Asymmetrische Verschlüsselung

  • VB.NET

Es gibt 20 Antworten in diesem Thema. Der letzte Beitrag () ist von Gelöschter Benutzer.

    Asymmetrische Verschlüsselung

    Hallo,
    Ich brauche Hilfe bei einer asymmetrische Verschlüsselung.

    Button1 soll ein Schlüsselpaar generieren (PublicKey und PrivateKey)
    PublicKey nur zum VERSCHLÜSSELN und PrivateKey nur zum ENTSCHLÜSSELN

    Dazu gibt es dann eine Ver- und Entschlüsseln Funktion.
    Ich hänge jetzt seit 2 Tagen dabei und komme einfach nicht weiter...

    Schau dir RC4 RSA dafür an, mit 4096 Bit Keylänge sollte das momentan noch ausreichend sicher sein.

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

    4096bit wird noch lange genug sicher sein. Erst wenn die Quantencomputer kommen, wäre das vielleicht in Gefahr, aber dann können wir uns eh erschießen. ^^

    TE: Was hast Du vor?
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    Hä? Es geht also um den Vorschlag von gestern?
    Ich habe schon einmal gesagt, dass Du signieren sollst, aber ok, ich halte mich raus.
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    Nein, es geht nicht in erster Linie nur um den Vorschlag von gestern. Ich will mich erstmal mit der asymmetrische Verschlüsselung vertraut machen. Wenn Ich die beherrsche, dann werde Ich mich evtl. nochmal an den Vorschlag von gestern wagen.
    Und wo ist jetzt das Problem?
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    Ich habe es nun geschafft, das ganze in php und vb.net zu programmieren. Allerdings gibts es ein Problem. Auch wenn Ich 2 mal die gleichen Key's benutze kann php nichts von vb ent-/verschlüsseln und umgekehrt. Wo ist das Problem?

    Das Wort "Test" verschlüsselt in php:
    rYg6ck0YzEu6AjuO20EsrYMaQ6dJuDdjcFrgkfqz/QYFUzA5VvG5LZLPS4PHzCKfDAaLY6gJWDQX/IMR78QDsKcvZlKwuiRlv2LZKKv1qns0lJQQg7U/My4HNWbi2689bxhTfW4/oh/MJltOKc+cbfB8ePI9xV9diumxV2DwWBDAt1XFDgr8ugSW58RIMgQFqlfUqhBrEkhaqdAZ/iv8H8cMujBo0DVJYuWfhVTxmulmvUR7wwq+eYcLjyqNHM8rdr3/RBlx13BCEcGxF39xavaznlNRO8Dsp8C3ibMWAvuEUfSPmC3Y8bsWb7qZStd1BQ0pjkBeKWMJFRpt5kD2ZQ==

    Das Wort "Test" verschlüsselt in vb:
    p3NF+T+SklVZQzFTwuGAKEtHXVuDoG1C7qgwo6XVr1MEPL0ovheJE5YdGc8B/qodWD3Oa3XrHGox0ylu+YtbOfm4gRZsGK1uEK4WizDb2+4wWsf9QRKXXd9AMUTdIjFckkvuaoVCiEAScEdkZ1aQvjKSbhc/RCHJDjt/eRXNVICHnDXDqVnzmJDOEO1eupWxV3qbzPVndTvcePTt4n6gpmOUxADUQllj0b4pdWxFI4TjHsyuOTAjv9jkorCfPBZXyF2hQDxmqAucvvWHWo9ffSwYTjopIV4vPU/Q7byT5KYN/eLvtQzNJbJQNPzpSG2mSsa+wab/dAN6O9bE72J5vA==


    Benutzen PublicKey:
    <RSAKeyValue><Modulus>sn/FbDuUl4fObYfkJpWA017Xdi9HmYvdUiZmOpHMBXZMKIsCa98yVdiX2SnXGLLtbzIQCxZjUN7JdgU3DeR7FTzi74PMYrovGdAL5nm4KFdOVMxSsdYpT4bBN6j5OkXDbrhIJTg/jZ/PZ/TdEbad4J0YBhtsk5OlL66O8wrP21o1h/UkKo2PZ8wozRRT7O4SDblDCMjZILWkwjbhscSE+0jjZ7TOnyiEj6+ahskG00lLcmcqCzaKK9h9VPZlr/YHNh0SRDJ4QwctHS2KLmd9/Ub5Fp/YErGlDpkHHQMrfqcFkeMLAGjHYFzmQn7+5ss+DnEVVFEObscOyD2bWBw8EQ==</Modulus><Exponent>AQAB</Exponent></RSAKeyValue>

    Benutzden PrivateKey:
    <RSAKeyValue><Modulus>sn/FbDuUl4fObYfkJpWA017Xdi9HmYvdUiZmOpHMBXZMKIsCa98yVdiX2SnXGLLtbzIQCxZjUN7JdgU3DeR7FTzi74PMYrovGdAL5nm4KFdOVMxSsdYpT4bBN6j5OkXDbrhIJTg/jZ/PZ/TdEbad4J0YBhtsk5OlL66O8wrP21o1h/UkKo2PZ8wozRRT7O4SDblDCMjZILWkwjbhscSE+0jjZ7TOnyiEj6+ahskG00lLcmcqCzaKK9h9VPZlr/YHNh0SRDJ4QwctHS2KLmd9/Ub5Fp/YErGlDpkHHQMrfqcFkeMLAGjHYFzmQn7+5ss+DnEVVFEObscOyD2bWBw8EQ==</Modulus><Exponent>AQAB</Exponent><P>49ERFf+7goLjMR+48q/mS8BQo6m7MOsvLO+KzRp3c+jfIs/FbwGC7NgU1bDdvZOp7Tlpmvi8LArPrGn//wUyGReWHT0C1BErI9rrZQ74hnk/byxnOZ7g6BNJbVY5OOfIjpQriyq21qZb+P/1t01z68LCNI81vI1Atooj7AEi7y8=</P><Q>yJTSXgTRws1AFq69+A8vPZjJTVAEOJaL8QWv7pR4Y0eblG0noKnvwhqi2YVBsF5zx1IijRDfklG5PIIHLHaZPtNYB/eK5Txih1eZnhxF4zzxcCzb/eegxwhded7RlthoW/Q0KwMxewmzziARojeyZFk48m/6tvjmqtqM/HZ+uL8=</Q><DP>ECoDVlZAza/PwuqHSuDkLDfHAPXIDF6DiGKurILWOuko++VWEtw+l+N1Bvx3nz3c7rIGJjLD1zQlLAyRV1zdAx7DTevISZe2QeMElLUNOS1dLNwvrszxFEZaDWHyyXDYsBUfSc6MDorbN72hh5H9SZsWAHiwzWIQV2NRzSr/eY0=</DP><DQ>P57MltuqeMJHaKpmQO74Ce6TMv2FSTmfC4TFR8Q55yuIUmzI2/HqxUNTkfDtY/ahfIA1y06lyzA2s9V+VwELHF1Gl8hReuJLUihb5kWLeUcUQYNJB+DXIyopFAWzrsfXWgs8HMR3hlIOgPu0/CH0aFXQdT1FZZHPADQv8cfX69s=</DQ><InverseQ>O8g4vE1i0bKdSGDT/Jw7JewwJGe+KhOBuUXowJpydxW0RlJ0cDalv0s25VwakTP/7vxYcvoRfKgAUv0/mprP2RCh7kN++5hj5viiYgFiYWt0EQ2+H0qR3nGnSNMhS3y59O5FMT9mhvuuWKJomROETzXc/DNM7rw6UsQ2NqkYVi8=</InverseQ><D>FH7RR1UsAZ4pWLBCxR9jdGGucbaKDRpfJkCcelslRvdHVVxowcQV/n9pKBlCxmY9FwhziSJf8vgxv6hnouO6Mj0UfZXvkOJ56AfYZfVR7OfhaaEwWZUSlzwM0XxIaaV7BCqKtiNYQMW5xeD6xT7nr9O533GkrOlGDUyIw2VZaoEm9c98H1DnMQJGG1YtroLvZ3XnsSxPMbzoX38QSkDrV58GuT7IMSmOxoA8970RfcFIiWdaOp7wifREQSw+zaCdEg/oTmSHPJ5gCXaiUf2Ug3kJKZIKKS6UmfmtKjB9MEhVYGlBAw6W9NBWI9oDFkweujlKTWH6B33WJdkQ7O+GNQ==</D></RSAKeyValue>

    php Quellcode:

    PHP-Quellcode

    1. <?php
    2. include('Crypt/RSA.php');
    3. $rsa = new Crypt_RSA();
    4. $rsa->loadKey('<RSAKeyValue><Modulus>sn/FbDuUl4fObYfkJpWA017Xdi9HmYvdUiZmOpHMBXZMKIsCa98yVdiX2SnXGLLtbzIQCxZjUN7JdgU3DeR7FTzi74PMYrovGdAL5nm4KFdOVMxSsdYpT4bBN6j5OkXDbrhIJTg/jZ/PZ/TdEbad4J0YBhtsk5OlL66O8wrP21o1h/UkKo2PZ8wozRRT7O4SDblDCMjZILWkwjbhscSE+0jjZ7TOnyiEj6+ahskG00lLcmcqCzaKK9h9VPZlr/YHNh0SRDJ4QwctHS2KLmd9/Ub5Fp/YErGlDpkHHQMrfqcFkeMLAGjHYFzmQn7+5ss+DnEVVFEObscOyD2bWBw8EQ==</Modulus><Exponent>AQAB</Exponent></RSAKeyValue>'); // public key
    5. $plaintext = 'Test';
    6. $rsa->setEncryptionMode(CRYPT_RSA_ENCRYPTION_PKCS1);
    7. $ciphertext = $rsa->encrypt($plaintext);
    8. $rsa->loadKey('<RSAKeyValue><Modulus>sn/FbDuUl4fObYfkJpWA017Xdi9HmYvdUiZmOpHMBXZMKIsCa98yVdiX2SnXGLLtbzIQCxZjUN7JdgU3DeR7FTzi74PMYrovGdAL5nm4KFdOVMxSsdYpT4bBN6j5OkXDbrhIJTg/jZ/PZ/TdEbad4J0YBhtsk5OlL66O8wrP21o1h/UkKo2PZ8wozRRT7O4SDblDCMjZILWkwjbhscSE+0jjZ7TOnyiEj6+ahskG00lLcmcqCzaKK9h9VPZlr/YHNh0SRDJ4QwctHS2KLmd9/Ub5Fp/YErGlDpkHHQMrfqcFkeMLAGjHYFzmQn7+5ss+DnEVVFEObscOyD2bWBw8EQ==</Modulus><Exponent>AQAB</Exponent><P>49ERFf+7goLjMR+48q/mS8BQo6m7MOsvLO+KzRp3c+jfIs/FbwGC7NgU1bDdvZOp7Tlpmvi8LArPrGn//wUyGReWHT0C1BErI9rrZQ74hnk/byxnOZ7g6BNJbVY5OOfIjpQriyq21qZb+P/1t01z68LCNI81vI1Atooj7AEi7y8=</P><Q>yJTSXgTRws1AFq69+A8vPZjJTVAEOJaL8QWv7pR4Y0eblG0noKnvwhqi2YVBsF5zx1IijRDfklG5PIIHLHaZPtNYB/eK5Txih1eZnhxF4zzxcCzb/eegxwhded7RlthoW/Q0KwMxewmzziARojeyZFk48m/6tvjmqtqM/HZ+uL8=</Q><DP>ECoDVlZAza/PwuqHSuDkLDfHAPXIDF6DiGKurILWOuko++VWEtw+l+N1Bvx3nz3c7rIGJjLD1zQlLAyRV1zdAx7DTevISZe2QeMElLUNOS1dLNwvrszxFEZaDWHyyXDYsBUfSc6MDorbN72hh5H9SZsWAHiwzWIQV2NRzSr/eY0=</DP><DQ>P57MltuqeMJHaKpmQO74Ce6TMv2FSTmfC4TFR8Q55yuIUmzI2/HqxUNTkfDtY/ahfIA1y06lyzA2s9V+VwELHF1Gl8hReuJLUihb5kWLeUcUQYNJB+DXIyopFAWzrsfXWgs8HMR3hlIOgPu0/CH0aFXQdT1FZZHPADQv8cfX69s=</DQ><InverseQ>O8g4vE1i0bKdSGDT/Jw7JewwJGe+KhOBuUXowJpydxW0RlJ0cDalv0s25VwakTP/7vxYcvoRfKgAUv0/mprP2RCh7kN++5hj5viiYgFiYWt0EQ2+H0qR3nGnSNMhS3y59O5FMT9mhvuuWKJomROETzXc/DNM7rw6UsQ2NqkYVi8=</InverseQ><D>FH7RR1UsAZ4pWLBCxR9jdGGucbaKDRpfJkCcelslRvdHVVxowcQV/n9pKBlCxmY9FwhziSJf8vgxv6hnouO6Mj0UfZXvkOJ56AfYZfVR7OfhaaEwWZUSlzwM0XxIaaV7BCqKtiNYQMW5xeD6xT7nr9O533GkrOlGDUyIw2VZaoEm9c98H1DnMQJGG1YtroLvZ3XnsSxPMbzoX38QSkDrV58GuT7IMSmOxoA8970RfcFIiWdaOp7wifREQSw+zaCdEg/oTmSHPJ5gCXaiUf2Ug3kJKZIKKS6UmfmtKjB9MEhVYGlBAw6W9NBWI9oDFkweujlKTWH6B33WJdkQ7O+GNQ==</D></RSAKeyValue>'); // private key
    9. echo base64_encode($ciphertext) . "<br>";
    10. echo $rsa->decrypt($ciphertext);
    11. ?>


    Benutztes php-Lib: phpseclib.sourceforge.net/rsa/examples.html#encrypt,enc2
    Benutztes vb-Project: RSA Verschlüssellung, asymmetrische Verschlüssellung leicht gemacht

    Wo könnte das Problem sein?
    Beide Programme funktionieren nämlich für sich.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Gelöschter Benutzer“ ()

    timchen100 schrieb:

    Ich befasse mich gerne
    Du solltest zunächst folgendes voneinander trrennen:
    Algorithmus
    und
    Primzahlen.
    Um den Algorithmus kennenzulernen und zu implementieren, nimm kleine Primzahlen, wo Du noch alles von Hand nachrechnen kannst.
    Wenn der Algorithmus läuft, besorg Dir die großen Zahlen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ich verstehe leider nicht wirklich was du meinst. :/ Ich kenne mich wirklich nicht damit aus und bin echt froh gewesen, als beide (php & vb) funktionierten. Nur verstehe Ich momentan nicht: Wieso funktionieren beide nicht miteinander?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Gelöschter Benutzer“ ()

    Das steht in einem Modul in vb.net drin:

    VB.NET-Quellcode

    1. Structure RSA_key_Struct
    2. Dim open_key As String 'Bestehend aus einem öffentlichem
    3. Dim privat_key As String 'und einem privatem Schlüssel, die beide als string im XML-Format ges
    4. End Structure
    5. 'Zufälligen RSA Schlüssel erstellen. Mit einer Schlüssellänge von 2048 als Standartwert
    6. Function Create_RSA_Key(Optional ByVal keysize As Integer = 2048) As RSA_key_Struct
    7. Dim RSA_key As RSA_key_Struct 'RSA_key als RSA_key_Struct Struktur definieren
    8. Dim RSA_Crypto As New RSACryptoServiceProvider(keysize) 'Zufällige Schlüssel generieren
    9. RSA_key.open_key = RSA_Crypto.ToXmlString(False) 'Öffentlichen Schlüssel schreiben
    10. RSA_key.privat_key = RSA_Crypto.ToXmlString(True) 'Privaten Schlüssel schreiben
    11. RSA_Crypto.Dispose() 'Ressourcen freigeben
    12. Return RSA_key 'Schlüssel übergeben
    13. End Function
    14. 'String mit RSA verschlüsseln. Mit einer Schlüssellänge von 2048 als Standartwert. Zum Verschlüsseln wird der öffentliche Schlüssel verwendet
    15. Function RSA_ver(ByVal DATA As String, ByVal Openkey_Xml As String, Optional ByVal keysize As Integer = 2048) As String
    16. Dim RSA_Crypto_ver As New RSACryptoServiceProvider(keysize) 'RSA-service wird deklariert
    17. Dim byte_data As Byte() = UTF8Encoding.UTF8.GetBytes(DATA) 'Daten-String wird in ein byte array geschrieben
    18. Dim Out_String As String = String.Empty 'Ausgangswert wird deklariert
    19. RSA_Crypto_ver.FromXmlString(Openkey_Xml) 'RSA-service erhält den öffentlichen Schlüssel
    20. Out_String = Convert.ToBase64String(RSA_Crypto_ver.Encrypt(byte_data, True)) 'Daten werd verschlüsselt und in einen Base64-String geschrieben
    21. RSA_Crypto_ver.Dispose() 'Ressourcen werden freigeben
    22. Return Out_String 'Verschlüsselte Daten werden übergeben
    23. End Function


    Das hier ist der 'Verschlüsseln' Button in vb.net:

    VB.NET-Quellcode

    1. RichTextBox3.Text = Crypt.RSA_ver(RichTextBox1.Text, puk.Text)

    Wobei RichTextBox3 der Output ist, RichTextBox1 der Input und puk der PublicKey.

    Das ist die Verschlüsselung in php:

    PHP-Quellcode

    1. <?php
    2. include('Crypt/RSA.php');
    3. $rsa = new Crypt_RSA();
    4. $rsa->loadKey('<RSAKeyValue><Modulus>sn/FbDuUl4fObYfkJpWA017Xdi9HmYvdUiZmOpHMBXZMKIsCa98yVdiX2SnXGLLtbzIQCxZjUN7JdgU3DeR7FTzi74PMYrovGdAL5nm4KFdOVMxSsdYpT4bBN6j5OkXDbrhIJTg/jZ/PZ/TdEbad4J0YBhtsk5OlL66O8wrP21o1h/UkKo2PZ8wozRRT7O4SDblDCMjZILWkwjbhscSE+0jjZ7TOnyiEj6+ahskG00lLcmcqCzaKK9h9VPZlr/YHNh0SRDJ4QwctHS2KLmd9/Ub5Fp/YErGlDpkHHQMrfqcFkeMLAGjHYFzmQn7+5ss+DnEVVFEObscOyD2bWBw8EQ==</Modulus><Exponent>AQAB</Exponent></RSAKeyValue>'); // public key
    5. $plaintext = 'Test';
    6. $rsa->setEncryptionMode(CRYPT_RSA_ENCRYPTION_PKCS1);
    7. $ciphertext = $rsa->encrypt($plaintext);
    8. echo base64_encode($ciphertext)";
    9. ?>


    //EDIT
    Aber wie bereits erwähnt funktionieren beide Programme (vb.net & php) für sich alleine einwandfrei. D.h. Eigens verschlüsselte Wörter/Inputs können vom selben Programm auch wieder Problemlos entschlüsselt werden. Nur ist es eben so, dass z.b. vb.net keine von php verschlüsselten Wörter/Inputs entschlüsseln kann und umgekehrt, auch nicht mit den passenden Schlüsseln.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Gelöschter Benutzer“ ()

    Der Code ist guidelinetechnisch ein Graus.
    Überall Unterstriche und wild gemischte Groß- und Kleinschreibung.
    Lies Dir bitte die Microsoft Guidelines durch und benenne dein Zeugs richtig.</justmy2cents>
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    Schau dir mal das an:
    PKI im Zusammenspiel mit .NET

    Die loadKey-Funktion scheint die Keys im PEM-Format zu nehmen, nicht im dem, das .NET verwendet. Beispiele dazu gibt's bei dem von mir verlinkten StackOverflow-Thread.
    Von meinem iPhone gesendet