Verschlüsselung



  • Benutz die asio Bibliothek und du kriegst den OpenSSL Support so gut wie geschenkt.



  • Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum Rund um die Programmierung verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Vielleicht hilft dir das weiter http://www.ibm.com/developerworks/linux/library/l-openssl.html

    simple de luxe schrieb:

    Verschlüsselungsalgorithmen sind relativ einfach zu programmieren.
    Einen Anreiz findest du hier:
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-186822-and-start-is-0.html

    Das ist doch nicht dein Ernst 👎 Verschlüsselungsalgorithmen sind ein kompliziertes Thema und solche Kindergarten Verschlüsselungen wie in dem angesprochenen Thread kann man sich gleich schenken!



  • rüdiger schrieb:

    Das ist doch nicht dein Ernst 👎 Verschlüsselungsalgorithmen sind ein kompliziertes Thema und solche Kindergarten Verschlüsselungen wie in dem angesprochenen Thread kann man sich gleich schenken!

    Du wirst keinen mit XOR verschlüsselten Text entschlüssen, wenn man einen etwas größeren Schlüssel nimmt.



  • Vielen Dank für diese Link, ich gucke mal, ob er mich weiterbringt 🙂

    jajaja schrieb:

    rüdiger schrieb:

    Das ist doch nicht dein Ernst 👎 Verschlüsselungsalgorithmen sind ein kompliziertes Thema und solche Kindergarten Verschlüsselungen wie in dem angesprochenen Thread kann man sich gleich schenken!

    Du wirst keinen mit XOR verschlüsselten Text entschlüssen, wenn man einen etwas größeren Schlüssel nimmt.

    - Der Schlüssel muss die gleiche Länge wie der Plain Text haben
    - Der Schlüssel muss ABSOLUT ZUFÄLLIG generiert werden
    - JEDER SCHLÜSSEL darf nur EINMAL benutzt werden

    Wie auch immer 🙂 Ich gucke mir mal den Link an.

    Schonmal Vielen Dank an dieser Stelle, sollte jemand aber noch mehr wissen -> Posten!

    Viele Grüße,
    DerPlanlose



  • DerPlanlose schrieb:

    Vielen Dank für diese Link, ich gucke mal, ob er mich weiterbringt 🙂

    jajaja schrieb:

    rüdiger schrieb:

    Das ist doch nicht dein Ernst 👎 Verschlüsselungsalgorithmen sind ein kompliziertes Thema und solche Kindergarten Verschlüsselungen wie in dem angesprochenen Thread kann man sich gleich schenken!

    Du wirst keinen mit XOR verschlüsselten Text entschlüssen, wenn man einen etwas größeren Schlüssel nimmt.

    - Der Schlüssel muss die gleiche Länge wie der Plain Text haben
    - Der Schlüssel muss ABSOLUT ZUFÄLLIG generiert werden
    - JEDER SCHLÜSSEL darf nur EINMAL benutzt werden

    schafst du auch schon bei nem viel kleineren schlüssel nicht. wenn du nicht nen quantencomputer hast.



  • Hallo,
    ich bins nochmal ich habe es FAST geschafft 🙂 Allerdings habe ich noch das Problem, dass die Funktion SSL_get_verify_result( z. 65 ) einen Fehler zurückgibt und der Server nichts empfängt ansonsten steht die Verbindung.

    // Client
    #define _CRT_SECURE_NO_DEPRECATE
    
    #include <stdio.h>
    #include <string>
    
    #include <openssl/bio.h>
    #include <openssl/ssl.h>
    #include <openssl/err.h>
    
    void InitOpenSSL()
    {
    	SSL_library_init();
    	SSL_load_error_strings();
    	ERR_load_BIO_strings();
    	OpenSSL_add_all_algorithms();
    }
    
    int main()
    {
        BIO * bio;
        SSL * ssl;
        SSL_CTX * ctx;
    
        /* Set up the library */
    	InitOpenSSL();
    
        /* Set up the SSL context */
    
        ctx = SSL_CTX_new(SSLv23_client_method());
    
        /* Load the trust store */
    
        if(! SSL_CTX_load_verify_locations(ctx, "TrustStore.pem", NULL))
        {
            fprintf(stderr, "Error loading trust store\n");
            ERR_print_errors_fp(stderr);
            SSL_CTX_free(ctx);
            return 0;
        }
    
        /* Setup the connection */
    
        bio = BIO_new_ssl_connect(ctx);
    
        /* Set the SSL_MODE_AUTO_RETRY flag */
    
        BIO_get_ssl(bio, & ssl);
        SSL_set_mode(ssl, SSL_MODE_AUTO_RETRY);
    
        /* Create and setup the connection */
    
    	BIO_set_conn_hostname(bio, "127.0.0.1:12345");
    
        if(BIO_do_connect(bio) <= 0)
        {
            fprintf(stderr, "Error attempting to connect\n");
            ERR_print_errors_fp(stderr);
            BIO_free_all(bio);
            SSL_CTX_free(ctx);
            return 0;
        }
    
        /* Check the certificate */
        if(SSL_get_verify_result(ssl) != X509_V_OK) // <-- Rückgabe 19
        {
            fprintf(stderr, "Certificate verification error: %i\n", SSL_get_verify_result(ssl));
    		BIO_free_all(bio);
            SSL_CTX_free(ctx);
            return 0;
        }
    
    	char buf[256];
    	int rc;
    
    	const char *Msg = "Hello Server\n";
    
    	for(;;)
        {
            rc = BIO_read(bio, buf, 255);
            if(rc <= 0) break;
            buf[rc] = 0;
            printf("%s", buf);
    		BIO_write( bio, Msg, strlen( Msg ) );
        }
    
        /* Close the connection and free the context */
    
        BIO_free_all(bio);
        SSL_CTX_free(ctx);
        return 0;
    }
    
    // Server
    #define _CRT_SECURE_NO_DEPRECATE
    
    #include <stdio.h>
    #include <string>
    
    #include <openssl/bio.h>
    #include <openssl/ssl.h>
    #include <openssl/err.h>
    
    int password_callback(char *buf, int size, int rwflag, void *userdata)
    {
        /* For the purposes of this demonstration, the password is "ibmdw" */
    
        printf("*** Callback function called\n");
        strcpy(buf, "ibmdw");
        return 1;
    }
    
    void InitOpenSSL()
    {
    	SSL_library_init();
    	SSL_load_error_strings();
    	ERR_load_BIO_strings();
    	OpenSSL_add_all_algorithms();
    }
    
    int main()
    {
        SSL_CTX *ctx;
        SSL *ssl;
        BIO *bio, *abio, *out;//, *sbio;
    
        int (*callback)(char *, int, int, void *) = &password_callback;
    
        printf("Secure Programming with the OpenSSL API, Part 4:\n");
        printf("Serving it up in a secure manner\n\n");
    
    	InitOpenSSL();
    
        printf("Attempting to create SSL context... ");
        ctx = SSL_CTX_new(SSLv23_server_method());
        if(ctx == NULL)
        {
            printf("Failed. Aborting.\n");
            return 0;
        }
    
        printf("\nLoading certificates...\n");
        SSL_CTX_set_default_passwd_cb(ctx, callback);
        if(!SSL_CTX_use_certificate_file(ctx, "certificate.pem", SSL_FILETYPE_PEM))
        {
            ERR_print_errors_fp(stdout);
            SSL_CTX_free(ctx);
            return 0;
        }
        if(!SSL_CTX_use_PrivateKey_file(ctx, "private.key", SSL_FILETYPE_PEM))
        {
            ERR_print_errors_fp(stdout);
            SSL_CTX_free(ctx);
            return 0;
        }
    
        printf("Attempting to create BIO object... ");
        bio = BIO_new_ssl(ctx, 0);
        if(bio == NULL)
        {
            printf("Failed. Aborting.\n");
            ERR_print_errors_fp(stdout);
            SSL_CTX_free(ctx);
            return 0;
        }
    
        printf("\nAttempting to set up BIO for SSL...\n");
        BIO_get_ssl(bio, &ssl);
        SSL_set_mode(ssl, SSL_MODE_AUTO_RETRY);
    
        abio = BIO_new_accept("12345");
        BIO_set_accept_bios(abio, bio);
    
        printf("Waiting for incoming connection...\n");
    
        if(BIO_do_accept(abio) <= 0)
        {
            ERR_print_errors_fp(stdout);
            SSL_CTX_free(ctx);
            BIO_free_all(bio);
            BIO_free_all(abio);
            return 1;
        }
    
        if(BIO_do_accept(abio) <= 0)
        {
            ERR_print_errors_fp(stdout);
            SSL_CTX_free(ctx);
            BIO_free_all(bio);
            BIO_free_all(abio);
            return 1;
        }
    
        out = BIO_pop(abio);
    
        if(BIO_do_handshake(out) <= 0)
        {
            printf("Handshake failed.\n");
            ERR_print_errors_fp(stdout);
            SSL_CTX_free(ctx);
            BIO_free_all(bio);
            BIO_free_all(abio);
            return 1;
        }
    
    	char buf[256];
    	int rc;
    
    	for(;;)
        {
    		BIO_puts(out, "Hello Client\n");
            rc = BIO_read(abio, buf, 255);
            if(rc <= 0) break;
            buf[rc] = 0;
            printf("%s", buf);
        }
    
        BIO_free_all(out);
        BIO_free_all(bio);
        BIO_free_all(abio);
    
        SSL_CTX_free(ctx);
    }
    

    Aufjedenfall müsste ich auch noch ein Zertifikat erstellen. Da komme ich leider auch nicht weiter. Schonmal vielen Dank

    Viele Grüße,
    DerPlanlose



  • int password_callback(char *buf, int size, int rwflag, void *userdata)
    {
    /* For the purposes of this demonstration, the password is "ibmdw" */

    printf("*** Callback function called\n");
    strcpy(buf, "ibmdw");
    --> return 1;

    --> return strlen("ibmdw")

    sorry , hab gerade noscript an --> kann den code nicht highlighten



  • jajaja schrieb:

    schafst du auch schon bei nem viel kleineren schlüssel nicht. wenn du nicht nen quantencomputer hast.

    du willst also einfach xor mit dem gleichem schlüssel mehrfach hintereinander anwenden? das kannst du sogar auf nem blatt papier entschlüsseln, dafür brauchst du keinen quantencomputer.



  • Ich habe lange gebraucht, bis ich einen brauchbaren Verschlüsselungcode gefunden habe... Damit es dir nicht auch so geht, hier der Code den ich letzen Endes gefunden habe:

    void rc4_encryption(char* content, int content_length, char* key, int key_length) 
    { 
        unsigned char S[256]; //S-Box 
        unsigned int i=0,j=0,n=0; //Laufvariablen 
        unsigned char temp; 
    
        //KSA (key-scheduling algorithm) - Berechnet die S-Box 
        for(i=0;i<256;i++) 
        {S[i] = i;} 
        for (i=j=0;i<256;i++) 
        { 
            j = (j + key[i % key_length] + S[i]) & 255; 
            temp = S[i]; 
            S[i] = S[j]; 
            S[j] = temp; 
        } 
        i=j=0; 
    
        for (n=0; n<content_length; n++) //Läuft den gesamten Inhalt durch 
        { 
            //PRGA (pseudo-random generation algorithm) 
            i = (i + 1) & 255; 
            j = (j + S[i]) & 255; 
            temp = S[i]; 
            S[i] = S[j]; 
            S[j] = temp; 
    
            content[n] = content[n] ^ S[(S[i] + S[j]) & 255];  //XOR Verknüpfung mit dem Inhalt 
        } 
    }
    

Anmelden zum Antworten