Verschlüsselung eines strings in C

NetzUnity und Informatik-forum wurden zusammengelegt. Eine entsprechende Ankündigung wird demnächst noch folgen. Für 2025 ist hier einiges geplant! Bei Fragen bitte per DM an Maximilian Rupp wenden.
  • Hallo,

    langsam verzweifle ich... häng da an so nem blöden Prog und komm nicht weiter. Könnt ihr da mal drüber schaun und nem anfänger helfen?

    sollen ein Prog in C schreiben, das einen beliebigen Text einliest und diesen dann per key verschlüsselt.

    Es soll so aussehen, dass der Text als string eingelesen wird und der code ebenfalls. Der Code darf buchstaben und ziffern enthalten.

    lautet der text:
    z.b. hallo,_ich_soll_verschluesselt_werden.

    und der key:
    z.b. auto

    soll der verschlüsselte text so aussehen.

    1432 < reihenfolge des keys
    auto
    hall
    o,_i
    ch_s
    oll_
    vers
    chlu
    esse
    lt_w
    erde
    n***

    die Ausgabe wäre dann:
    hocovcelenua,hlehstr*l__lrls_d*lis_suewe*

    den text lese ich zuerst als string ein, dann den key als string.

    dann übernehme ich den text in einen vektor, so dass er gleich in den richtigen reihen steht.

    ausschnitt:

    so, aber... nun zu meinem problem.
    wie mach ich das, dass ich diese spalten im vektor so aufrufe - oder tausche, dass sie mit dem codewort übereinstimmen?


    dane

  • pls code-tags verwenden für code ;)

    Code
    for(inti=0 ; i<anzzeilen ; i++)
    {
        for(int j=0 ; j<keylaenge ; j++)
        {
            vektor[j][i] = xyz; //xyz = operation v. vektor[j][i] mit key[j]
        }
    }

    ich nehm an du brauchst sowas in der art ;)
    einfacher gings noch wenn du auf das aufteiln von dem ganzen in einen zweidimensionalen vektor verzichtest und einfach über den ganzen string iterierst.

    Code
    for(int i=0,keyp=0 ; i<txtlaenge; i++,keyp++)
    {
        if(keyp==keylaenge)
            keyp=0;
        enc_text[i]=xyz; //xyz = operation v. text[i] mit key[keyp]
    }

    mfg

  • Hi kyp,

    Danke für die Hilfe...

    leider bin ich, wie man vermutlich merkt, ein absoluter anfänger was c betrifft.

    irgendwie hab ich aber trotzdem keinen plan, vor allem was deine letzte zeile betrifft:

    Code
    enc_text[i]=xyz; //xyz = operation v. text[i] mit key[keyp]

    das mit xyz bereitet mir sorgen... was ist damit gemeint?
    logischerweise bringt der compiler den fehler:

    Zitat

    'xyz' : nichtdeklarierter Bezeichner

    habs einfach mal versucht, so einzubinden - evtl spuckt mir ja der compiler einen für mich brauchbaren fehler aus. aber leider nicht...

    und... bitte nicht denken, ich wäre zu faul... hab erst im oktober mit c angefangen und versuch mich da auch ran zu halten...

    danke nochmal!!


    ps: der erste satz - ( pls code-tags verwenden für code ;) ) hat mich fast noch mehr verwirrt. bis ich rausgefunden hab was du meinst :o

  • ok, sorry wegen des kryptischen textes ;)
    mit "xyz" hab ich deine verschlüsselungsfunktion gemeint
    im einfachsten fall wärs halt eine XOR-verknüfung von schlüssel und text
    in c meines wissens nach das zeichen "^"; also:

    Code
    vektor[j][i]=vektor[j][i]^key[j]


    bzw.

    Code
    enc_text[i]=text[i]^key[keyp]

    lg

  • hi kyp,

    sry, dass ich mich so daemlich anstelle :verycool:

    jetzt hab ich verstanden was du meinst und vermute, dass wir aneinander vorbei geredet haben.

    mit dem xor bekomm ich zwar einen verschlüsselten text, aber es ist dicht die gewünschte verschiebung.

    habs vermutlich bloede beschrieben...

    die zeichen im text sollen NICHT verändert werden!! nur deren Position!!

    sollte der key 5-stellig sein, so werden wie im beispiel am anfang
    das 1. - 6. - 11. - 16. - 21. ... zeichen aneinandergereiht.
    selbes passiert auch mit den anderen zeichen, so dass ich 5 spalten habe, in denen jeweils die neue zeichenkette steht.

    und jetzt kommt mein eigentliches problem.
    diese spalten werden in den neuen text der reihe nach eingefügt, abhängig vom key.

    lautet der key: 12345 , so würden einfach die spalten der reihe nach benötigt.

    bei key: aRK8t
    wäre die reihenfolge - spalten 4,3,2,1,5 -> einfach abhängig der "zeichenwertigkeit" aus der ascii-tabelle.

  • verstehe :)

    aber sollte dann dein bsp vom ersten post nicht das als verschlüsselten text liefern:

    hocovcelenlis_suewe*l__lrls_d*a,hlehstr*

    ich würd dir vorschlagen du erstellst mal eine liste mit der reihenfolge; am einfachsten wahrscheinlich ein int[] vektor der dann (fürs erste bsp) inhaltlich so aussehen würde:
    reihenfolge = [0,3,2,1]
    und dann in einer geschachtelten for-schleife alles durchgehn

    Code
    for(int i=0;i<keylaenge;i++)
                for(int j=0;j<zeilen;j++)
                    enc_text[i*zeilen+j]=vektor[reihenfolge[i]][j];


    am ende steht in enc_text der verschlüsselte text drin :)
    mfg

  • hat geklappt - danke... :thumb:

    die verschluesselung hab ich so recht zuegig hinbekommen,
    aber die entschluesselung war doch komplizierter (fuer mich jedenfalls)
    als ich gedacht hab.
    aber es hat dennoch funktioniert.

    also das forum gefaellt mir :D
    vermutlich werd ich hier noch oefters so bloede fragen stellen... ;)

    dane

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!