datei verschlüsseln und entschlüsseln



  • hm,

    so was komplexes habe ich doch gar nicht verlangt, ich will einfach nur jedes zwichen um 10 erhöhen, das reicht für meine zwecke.

    jendrik



  • ist aber nicht wirklich verschlüsselt...

    int add10(BYTE* pbByte, DWORD size)
    {
       int* ptr = (int*)pbByte;
       while(size--)
       {
          *ptr += 10;
          if(*ptr > 255) *ptr = *ptr % 255;
          ptr++;
       }
    }
    

    [ Dieser Beitrag wurde am 07.10.2002 um 03:26 Uhr von int_esskar editiert. ]

    [ Dieser Beitrag wurde am 07.10.2002 um 03:28 Uhr von int_esskar editiert. ]



  • Original erstellt von int_esskar:
    ...

    Jo. Ich erlaube mir, den Code leicht zu c++-ifizieren.

    void cryptByAdd10(char* data,size_t size)
    {
       for(int i=0;i!=size;++i)
          data[i]+=10;
    }
    


  • Original erstellt von volkard:
    ...

    dann doch eher..

    void cryptByAdd10(char* data,size_t size)
    {
       while(size--)
          data[size]+=10;
    }
    

    [ Dieser Beitrag wurde am 07.10.2002 um 11:43 Uhr von int_esskar editiert. ]



  • Original erstellt von int_esskar:
    dann doch eher..

    void cryptByAdd10(char* data,size_t size)
    {
       while(size--)
          data[size]+=10;
    }
    

    Warum? Magste date[0] nicht behandeln?
    Und was hast Du gegen for-Schleifen? Für solche Zwecke sind die doch fein lesbar.
    Und irgendwie macht mein Compiler aus beiden Versionen 12 Assemblerbefehle.

    1:    void cryptByAdd10(char* data,size_t size)
    2:    {
    00401000   mov         eax,edx
    00401002   dec         edx
    00401003   test        eax,eax
    00401005   je          cryptByAdd10+16h (00401016)
    3:       while(size--)
    4:          data[size]+=10;
    00401007   mov         al,byte ptr [ecx+edx]
    0040100A   add         al,0Ah
    0040100C   mov         byte ptr [ecx+edx],al
    0040100F   mov         eax,edx
    00401011   dec         edx
    00401012   test        eax,eax
    00401014   jne         cryptByAdd10+7 (00401007)
    5:    }
    00401016   ret
    
    7:    void cryptByAdd102(char* data,size_t size)
    8:    {
    00401020   xor         eax,eax
    00401022   test        edx,edx
    00401024   je          cryptByAdd102+16h (00401036)
    00401026   push        ebx
    9:       for(size_t i=0;i!=size;++i)
    10:         data[i]+=10;
    00401027   mov         bl,byte ptr [eax+ecx]
    0040102A   add         bl,0Ah
    0040102D   mov         byte ptr [eax+ecx],bl
    00401030   inc         eax
    00401031   cmp         eax,edx
    00401033   jne         cryptByAdd102+7 (00401027)
    00401035   pop         ebx
    11:   }
    00401036   ret
    

    Oh, die for-schleife hat nur 6 Befehle in der Schleife, die while-Schleife hat 7. Also ist for vielleicht sogar schneller.

    Aber das war's gar nicht, um was es geht. Wollte nur die Lesbarkeit erhöhen, indem ich vereinfachte. Daß sowas gerne auch dabei schneller wird, ist purer Zufall.
    Und anmeckern will ich Deine Lösung auch nicht, die ist bereits n der ersten Fassung ne gute Antwort für den Fragestellen. Wollte nur noch nen kleinen Tip einbringen.

    [ Dieser Beitrag wurde am 07.10.2002 um 12:08 Uhr von volkard editiert. ]



  • na gut, na gut, es ist ja auch noch früh! 😉



  • ich habe meine Daten teilweise mir einem Bit-Kehrer "verschlüsselt.
    Gruss SKL

    void krypto( char *anfadr )
    {
      int i, l;
      unsigned char *poin;
    
      poin = anfadr;
    
      l = strlen( anfadr );
      for ( i=0; i<l; i++ )
      {
         *poin = ((*poin) << 4) + ((*poin) >> 4);
         poin++;
      }
    }
    

    Edit:
    Bitte die Code-Tags benutzen. Danke!

    [ Dieser Beitrag wurde am 07.10.2002 um 20:19 Uhr von Jansen editiert. ]



  • Wie kann ich das Beispiel von int_esskar in einem eigenen Programm anwenden? Mir ist nicht ganz klar welche Funktionen ich aufrufen muss, damit ich aus einem uncodierten Eingabestring einen codierten Ausgabestring erhalte und umgekehrt. Und was für ein Algorithmus ist das eigentlich (Blowfish?)?



  • ich würde euch empfehlen, dass ihr lieber eine Krypto Library nehmt, die euch alles schon anbietet, da man bei den Implementierungen leicht misst machen kann (zB. beim C&P die SBox versaut, einfach was falsch verstanden, Code falsch eingebunden ...).

    Librarys findet ihr in der FAQ oder per Google



  • mußte man nicht eigentlich nur die datei in einen buffer lesen, diesen verschlüsseln und das ganze dann in eine neue datei schreiben (zusammen mit angaben über ursprünglichen dateityp zum beispiel)??

    danach dann vieleicht noch da original löschen...

    oder sehe ich das völlig verkehrt?



  • jup, nur beim löschen der Datei solltest du darauf achten, dass man diese mit irgend welchen Zeichen überschreiben sollte (20 mal oder so glaub ich), weil man die sonst leicht rekonstruieren kann

    (wenn du aber keine gute Verschlüsselung nutzt, ist das eh egal)



  • ja danke, war nur so ne frage, weil ich den ihnalt der diskusion nicht verstehe...

    es ist doch jedem selbst überlasse, welchen algo zum verschlüsseln er nehmen will...

    wer unbedingt mit caesar verschlüsseln will soll es tun...

    fraglich ist ja auch immer vor wem man die daten schützen will??


Anmelden zum Antworten