caesarverschlüsselung in c++

Cisco90

Grünschnabel
Hallo zusammen,

in der Schule programmieren wir im Programmierunterricht gerade in C++ ein Passwortverwaltungsprogramm.
Für die Verschlüsselung der Passwörte sollen wir nun einen Algorithmus heraus finden.
Dabei sind wir auf den Caesar-Algorithmus gestoßen.
Nun wollte ich fragen ob dieser für eine Passwortverschlüsselung sinnvoll ist oder ein anderer sinnvoller wäre.

Mit freundlichen Grüßen
 
Hallo,

generell wäre eine solche Verschlüsselung nicht vorteilhaft, da sie schon sehr alt ist und sehr schnell geknackt werden kann.
Für den Schulunterricht würde es aber meiner Meinung nach ausreichen.

MFG

Sascha
 
Ok Problem bei der Sache ist nur das wir nicht sehr weit in C++ Programmieren sind und ich mir nicht sicher bin ob wir es umsetzen können.
Könnte es komplizierten werden diese Verschlüsselung in C++ zu programmieren

MfG
 
Code:
#include <cstdlib>
#include <iostream>

using namespace std;

void int_array ();

    char Verschluesselung [61];

void int_array()
{
     Verschluesselung[0] = 'A';      
     Verschluesselung[1] = 'B';
     Verschluesselung[2] = 'C';
     Verschluesselung[3] = 'D';
     Verschluesselung[4] = 'E';
     Verschluesselung[5] = 'F';
     Verschluesselung[6] = 'G';
     Verschluesselung[7] = 'H';
     Verschluesselung[8] = 'I';
     Verschluesselung[9] = 'J';
     Verschluesselung[10] = 'K';
     Verschluesselung[11] = 'L';
     Verschluesselung[12] = 'M';
     Verschluesselung[13] = 'N';
     Verschluesselung[14] = 'O';
     Verschluesselung[15] = 'P';
     Verschluesselung[16] = 'Q';
     Verschluesselung[17] = 'R';
     Verschluesselung[18] = 'S';
     Verschluesselung[19] = 'T';
     Verschluesselung[20] = 'U';
     Verschluesselung[21] = 'V';
     Verschluesselung[22] = 'W';
     Verschluesselung[23] = 'X';
     Verschluesselung[24] = 'Y';
     Verschluesselung[25] = 'Z';
     
     Verschluesselung[26] = 'a';
     Verschluesselung[27] = 'b';
     Verschluesselung[28] = 'c';
     Verschluesselung[29] = 'd';
     Verschluesselung[30] = 'e';
     Verschluesselung[31] = 'f';
     Verschluesselung[32] = 'g';
     Verschluesselung[33] = 'h';
     Verschluesselung[34] = 'i';
     Verschluesselung[35] = 'j';
     Verschluesselung[36] = 'k';
     Verschluesselung[37] = 'l';
     Verschluesselung[38] = 'm';
     Verschluesselung[39] = 'n';
     Verschluesselung[40] = 'o';
     Verschluesselung[41] = 'p';
     Verschluesselung[42] = 'q';
     Verschluesselung[43] = 'r';
     Verschluesselung[44] = 's';
     Verschluesselung[45] = 't';
     Verschluesselung[46] = 'u';
     Verschluesselung[47] = 'v';
     Verschluesselung[48] = 'w';
     Verschluesselung[49] = 'x';
     Verschluesselung[50] = 'y';
     Verschluesselung[51] = 'z';
     
     Verschluesselung[52] = '0';
     Verschluesselung[53] = '1';
     Verschluesselung[54] = '2';
     Verschluesselung[55] = '3';
     Verschluesselung[56] = '4';
     Verschluesselung[57] = '5';
     Verschluesselung[58] = '6';
     Verschluesselung[59] = '7';
     Verschluesselung[60] = '8';
     Verschluesselung[61] = '9';
   
     
}

int main(int argc, char *argv[])
{
    int_array();
    char tmp;
    char* Var="foo";

    int i;
    int x=0;
    int Key;
    cin >> Key;
    
    while ( *Var ) {
          tmp = static_cast<int>(*Var);
          Var++;
          i=0;
          
          while ( tmp != Verschluesselung[i] ){
                i++;
                }
                x++;
          cout << i*2+x-Key <<endl;
        
          }
          
    system("PAUSE");
    return EXIT_SUCCESS;
}
So sieht der Teil für die Verschlüsselung bisher aus.
 
Aua ... Caeser und Vigenére kann man mit einer einfachen Formel darstellen ;)
Caeser:
x = (x + key) % count_possible;
Das selbe geht auch mit Vigeneré, wenn du dir mal das verhalten der Werte anguckst ... Modulo wird zum eingrenzen des Bereiches genutzt. Simpel & Effektiv.
 
Genau das ist der Punkt die Formel alleine und das Verständnis sind kein Problem aber die Umsetzung und Einarbeitung in den C++ Quellcode bereiten Schwierigkeiten.
Und unser Lehrer kriegt selber nichts auf die Kette
 
Das IST ja auch die Lösung schon ...
Einfachste Umsetzung:
C++:
#include <iostream> // std::cin, std::cout
#include <string> // std::string, std::getline
#include <cctype> // std::islower

void caeser_encrypt_string(std::string&, const unsigned char);

int main()
{
    std::cout    << "Caeser-Verschlüsselung V0.1BETA\n"
        << "- Key: ";
    unsigned short key;
    std::cin >> key;
    std::cout << "- Eingabe: ";
    std::string input;
    std::getline(std::cin, input);
    caeser_encrypt_string(input, key);
}


void caeser_encrypt_string(std::string& source, const unsigned char key)
{
    for (std::string::iterator it(source.begin()); it != source.end(); ++it)
    {
        const bool is_lower(std::islower(*it) != 0);
        const char first_letter("Aa"[is_lower]);
        *it = (*it - first_letter + key) % 26 + first_letter;
    }
}
 
Aso ok,
so sieht das schon übersichtlicher und auch ein bischen einfacher aus.
Werde das im Unterricht mal ansprechen.
Vielen Dank
 
@devDevil:
Nimm's bitte nicht persönlich, aber für DIESES Konstrukt
Code:
const char first_letter("Aa"[is_lower]);
gehörst du ersch.. ääähh bestraft!

Das ist nun wirklich weder lesbarer Code noch für Anfänger (und darum geht es hier ja) verstehbar. Es kann zwar als 'highly sophisticated' bezeichnet werden, aber hier sollte man nicht zeigen, wie toll man ist und wieviel Funktionalität man in eine Zeile Code packen kann, sondern daß die Leute, denen Du was erklärst, das dann auch wirklich verstehen.
 
Zurück