AES encryption/decryption



  • Hallo an alle.

    Ich bin neu hier und dies ist mein erster Post. Also zerreist mich bitte nich gleich 😉 😃

    Ich will doch nur ein simples Programm schreiben das mir einen "Plaintext" mit Hilfe eines Schluessels in einen "Ciphertext" verwandelt. Ich bae mir die Funktionen AES_encrypt usw mal bei openssh/openssl angeshen blick aber nicht durch ... Um mich herum hab ich leider Niemanden den ich befragen koennte (um genau zu sein haben die schon Probleme mit ihre Windows buechsen umzugehen und da kommt auch noch jemand der fragt wie man programmiert .... 😮 😮 😕 )

    OK, hier mal mein System:

    SUN Ultra 60
    Solaris 10 1/06 s10s_u1wos_19a SPARC
    gcc version 3.3.2 Thread model: posix Configured with: ../configure --with-as=/usr/ccs/bin/as --with-ld=/usr/ccs/bin/ld --disable-nls

    aber das nur nebenbei ... 🙄

    hier ist das was ich versucht habe:

    #include <stdio.h>
    #include <string.h>
    #include "crypt/aes.h"
    
    unsigned char userkey="83D69AFE74BA630F";   // Crypt Schluessel in hex 16 byte
    const int bits=128;                       // keylaenge in bits 128 bit = 16 byte
    unsigned char in="1234567812345678";        // plaintext in hex 16 byte
    unsigned char out;                        // output buffer 16 byte
    
    int main(void)
    {
    
    int AES_set_encrypt_key(const unsigned char *userkey, const int bits, AES_KEY *key);
    
    void AES_encrypt(const unsigned char *in, unsigned char *out, const AES_KEY *key);
    
    printf ("crypted string: %h\n",out);
    return 0;
    }
    

    1. Ich bin mir nicht sicher ueber die Funktion von AES_set_encrypt_key
    2. AES_KEY wird definiert in include aes.h (der ist original von openssl) aber fuer was ist es gut und was ist *key ???
    3. Die "Doku" und die Kommentare im Source code sind etwas wiederspruechlich was die verwendung von unsigned char *in, unsigned char *out und *key.
    4. Vorallem das *key interessiert mich.
    5. Geht man davon aus das der String der zu verschluesseln ist 16 Zeichen nicht ueberschreitet, muss man da wirklich ein struct definieren ??

    Any help would be highly appreciated. 👍 👍

    TIA
    Martin



  • Nulltens: ein "unsigned char" hat Platz für EIN Zeichen - du brauchst "unsigned char[]" (Zeichen-Arrays) mit genügend Platz für deine Daten.

    Erstens: mußt du die Funktionen aufrufen und nicht nur deklarieren:

    int main()
    {
      AES_KEY key;
      AES_set_encrypt_key(userkey,bits,&key);
      AES_encrypt(in,out, &key);
      ...
    }
    

    Zweitens: AES_KEY ist vermutlich eine Datenstruktur, die zur Steuerung der Verschlüsselung verwendet wird. set_key() füllt diese Struktur anhand des Userkey's, encrypt() und decrypt() verwenden sie zum Ver- bzw. Entschlüsseln.

    Viertens: Die Key-Struktur wird als Zeiger übergeben, damit die Funktion den Schlüssel im Hauptprogramm ändern kann.



  • Vielleicht hilft dir meine AES-Implementation?

    ➡ Projekte :: AES: Test und Meinung

    Greetz, Swordfish



  • ... hmmm...

    mal sehen ob sich das auch mit unix vertraegt.

    Werd am Montag drann arbeiten - VIELEN DANK AN ALLE - so far :p :p



  • Hm, hab' grad' daran gedacht, dass meine Implementation eine Klasse ist. Müsstest für C etwas umschreiben. Ein Port auf UNIX dürfte jedoch kein Problem sein.

    Greetz, Swordfish



  • hier ist wohl ein tutorial angebracht. wer solche fehler macht, kann noch nicht lange c programmieren.
    http://www.pronix.de/pronix-4.html


Log in to reply