Crypt ? wie ent/verschlüssele ich einen CString
-
Original erstellt von Blue-Tiger:
ähh... für mich klingt das nach einfachem......... nicht-wieder-zurückgängen-machbar...Find ich auch, hört sich nicht so an ob du das wieder zu Plaintext zurückbekommst!
-
Stimmt. Und? Mehr brauche ich nicht. Ich lass mir eine Mail mit einem Namen schicken, gib die Adresse und den Namen in mein Crypt-Prog ein, lasse den Code berechen und schick der Person den Code zu. Der gibt das in das Prog von mir ein, dass er registrieren lassen will. Dort wird dann auch der Code berechnet und mit dem eingegebenen Code verglichen. Stimmen die Codes überein, wird der Name, Die Adresse un der Code in eine INI geschrieben und bei jedem Programmstart wird der Code neu überprüft.
Durch die Quersumme wird der Code nicht mehr rückverfolgbar. Das stimmt. Wenn ihr es lieber anders haben wollt, erstellt eine Funktion im Stil von
CString Crypt(CString sChar) { if(sChar == " ") return "6"; else if(sChar == "!") return "m"; //etc... }
Bei der if-Verzweifung einfach immer nach ASCII weitergehen, die return-Werte weist ihr am Ende zufällig zu. Dann nehmt ihr euch den zu verschlüsselnden Code und schreibt als Schleife:
void CMyDlg::OnCrypt() { UpdateData(true); CString sString = m_sString; CString sCrypt = ""; for(int i = 0; i < sString.GetLength(); i++) { sCrypt += Crypt(Crypt(Crypt(sString[i]))); } m_sCrypt = sCrypt; UpdateData(false); }
m_sString und m_sCrypt sind z.B. Editboxen.
Um das ganze zu entschülssen müsst ihr nur die genau umgekehrte Funktion implementieren. SO mach' ich es zumindestens.
Happosai
[ Dieser Beitrag wurde am 05.01.2003 um 20:23 Uhr von Happosai editiert. ]
-
ähm, in der FAQ zum Programmieren gibts da einen sehr interessanten Artikel.
Devil
-
Hier ist etwas zum spielen !! viel spass
#include <string.h> #include <stdio.h> void crypt(char *passwort, char *string); void encrypt(char *passwort, char *string); int main(int argc, char* argv[]) { char String[] = "Hallo Welt"; // Zu verschlüsselnder String crypt("passwort",String); // Verschlüsselung wird Passwort und String übergeben printf("Verschleusselt:\t%s\n",String); // Ausgabe des verschlüsselten Strings encrypt("passwort",String); // Entschlüsselung wird Passwort und verschlüsselter String übergeben printf("Entschleusselt:\t%s\n",String); // Ausgabe des entschlüsselten Strings return 0; } void crypt(char *passwort, char *string) { int passlen = strlen(passwort); // länge des Passwortes int stringlen = strlen(string); // länge des Strings if( stringlen <= 0 ) return; // Wenn <= 0 Function beenden if( passlen <= 0 ) return; // Wenn <= 0 Function beenden int curpasscharpos = 0; // Aktuelle Position im Passwort damit wir wissen mit welchen Zeichen wir verschlüsseln for( int i = 0; i < stringlen; i++){ // solange durchlaufen bis jedes Zeichen des Strings verschlüsselt wurde string[i] = string[i] + passwort[curpasscharpos]; // addition der beiden werte if( ++curpasscharpos >= passlen ) // erhöhen der Position im Passwort und wenn die > als die länge dessen ist curpasscharpos = 0; // fangen wir wieder vorn an } } void encrypt(char *passwort, char *string) // das selbe wie beim verschlüsseln { int passlen = strlen(passwort); int stringlen = strlen(string); if( stringlen <= 0 ) return; if( passlen <= 0 ) return; int curpasscharpos = 0; for( int i = 0; i < stringlen; i++){ string[i] = string[i] - passwort[curpasscharpos]; // hier wird subtraiert if( ++curpasscharpos >= passlen ) curpasscharpos = 0; } }
[ Dieser Beitrag wurde am 06.01.2003 um 00:08 Uhr von matti83 editiert. ]
-
Original erstellt von MaSTaH:
Schwachsinn... Wie wärs wenn du anstatt einer Schleife einfach array[x]+=15 machst??? Ist aber genauso schwachsinnig. Was passiert denn wenn du ein "°" (ASCII 248) im String hast. Beim hochzählen verlässt du den Bereich eines unsigned char (8 Bit) und kannst demnach nicht mehr entschlüsseln.Das siehst Du falsch! Stell Dir den Gülitgkeitsbereich in einem Kreis vor.
unsigned char dummy; char sDummy[10]; dummy=248+15; sprintf(sDummy,"%d",dummy); AfxMessageBox(sDummy); dummy-=15; sprintf(sDummy,"%d",dummy); AfxMessageBox(sDummy);
-
Wie wärs mit Binär? Einfach und übersichtlich
// Kann sein das noch mehr dateien da hinein müssen. #include <fstream> #include <stdio.h> // Speichern ofstream ofs("datei.ini", ios::binary); ofs.write((char*)var,sizeof(var)); // Lesen Achtung: Die variable in der du das wieder einliest, // muss genauso groß sein wie die du beim schreiben benutzt hast ifstream ifs("datei.ini", ios::binary); ifs.read((char*)var,sizeof(var));
So das wärs, ich hoffe du kannst damit was anfangen.
-
Also Leutz die wohl einfachste Verschlüsselung ist der hier weiter oben aufgeführte Caesar Algorithmus bei dem man einfach zu einem existierenden Zeichen einen Wert hinzu addiert und somit sein Aussehen etc. ändert. Dieser Code ist jedoch in Millisekunden zu knacken.... lol (also Schwachsinn) der Code wurde schon bei den Pharaonen benutzt.Also du solltest erstmal mitteilen, ob du eine Hash Codierung verwenden willst oder eine Codierung die sich wieder rückgängig machen lässt.
Hash funktioniert bekanntlich so, das eine z.B Zeichenkette codiert wird. will man testen ob zwei Zeichenketten gleich sind, so muss man die zweite Zeichenkette wieder hashen und dann die Hash Werte vergleichen. <- Aber Leute für sowas gibt es frei verfügbare Implementationen in fast jeder Programmiersprache also warum das Rad zweimal erfinden ?Solltest du eine Codierung verwenden wollen, die aus dem Codierten wieder den Plaintext erstellt mit Hilfe eines magischen Keys oder anderem so würde ich dir die AES Verschlüsselung empfehlen. Diese kann zur Zeit als quasi Standard angesehen werden. Rijndael sind die Menschen die sich das ausgedacht haben.
Schau mal auf die Seite der Source Code ist frei...... !http://www.esat.kuleuven.ac.be/~rijmen/rijndael/
Wenn du dazu fragen haben solltest, so kannst du mir gerne eine Mail schreiben ich helf dir dann.
Dadaywalker@gmx.deAlso Letztendlich schreib erstmal was für eine Verschlüsselung du verwenden möchtest. Symetrische oder Asymetrische. Für dein Problem wird die Symetrische Verschlüsselung ausreichen.
Gruß Dadaywalker
[ Dieser Beitrag wurde am 06.01.2003 um 11:06 Uhr von DaDaywalker editiert. ]
-
Ich glaub auf sourceforge.net waren auch einige c++-projekte zum thema verschlüsselung
-
Schau mal unter:
http://www.codeproject.com/cpp/ARACrypt.aspIch denk das ist eine einfache Methode.
-
Hi,
erstmal danke für die vielen Ideen und Hinweise.
Ich wollte wie gesagt eine simple Codierung,die
auch wieder einfach entschlüsselt werden kann.
Ob das jetzt jedes Kind knacken kann ist mir eigentlich
egal.Die Datei in die ich das schreibe ist relativ schwer zu
finden und jetzt auch als *.dll "getarnt".
So sicherheitsrelevant sind die Daten halt nichtIch schau gleich mal die geposteten Links an.
Scheint ja ein wirklich weites Feld zu seinDanke
Chris