Crypt ? wie ent/verschlüssele ich einen CString
-
Ich würde gerne einen CString, der in eine INI geschrieben werden
soll zuvor "verschlüsseln". Diese Verschlüsselung kann sehr einfach
gehalten sein. Weiß jemand Rat wie das gehen könnte ?
Evtl. mit Crypt... oderso ?Wie gesagt, die Verschlüsselung soll eine ganz einfache sein.
Chris
-
Hi ...
Wenn Du eine ganz normale Verschlüssellung
durchführen möchtest, dann solltest Du
einem Zeichen eine Zahlenfolge oder Zeichenfolge
zuordnen.Suche den CString nach einem Zeichen ab.
Wenn es z.B. ein a ist dann gib, wenn Du es in eine Datei
speicherst diesem Zeichen z.B. eine 1z3.
Wenn ein Zeichen ein b ist dann 2g9 in die Datei schreiben.
Und immer so weiter.bis denne
wnw
-
du weist es gibt eine ASCII tabelle bzw alle zeichen sind ascii zeiche (glaub ich gg)
nun nimm jeden einzelnen buchstaben aus deinem string, am besten du übergibst den string an ein array
nun zählst du jeden buchstaben
for(int i=0;i<=15;i++)
{
array[x]++;
}dadurch wir ein normales zeichen wie y zu z.B æ oder sowas (nimm ne größere zahl als 15 z.B. 120)
mach das mit dem gesamten array und schon ist dein text verschlüsselt, zum entschlüsseln mach einfach anstatt array[x]++, array[x]-- draus, und voila ein einfaches verschlüsselungstool ist geboren
-----EDIT-----
sorry hab nachgeforscht ich hätte schwören können dass ich das mal so gemacht habe, aber nicht exakt weil das geht net, kann jemand helfen? ich will einfach in der ascii tabelle ums x zeichen hochzählen um damit den jeweiligen buchstaben zu ändern....[ Dieser Beitrag wurde am 05.01.2003 um 04:48 Uhr von bigmama editiert. ]
[ Dieser Beitrag wurde am 05.01.2003 um 05:23 Uhr von bigmama editiert. ]
-
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 einzige was funktioniert wäre:
array[x] = 255 - array[x];
Aber das knackt jeder fünfjährige. Naja, vielleicht rechnet auch keiner mit so einer bescheuerten Verschlüsselung und verzweifelt deshalb daran...
[ Dieser Beitrag wurde am 05.01.2003 um 13:40 Uhr von MaSTaH editiert. ]
-
Sollte das Ergebnis ungefähr so aussehen?:
Ñ:ÇCZ¦Î=:DTܰÜZÑ:ÇCZ¦Î=:MTܰÜZаÜÁª Ü
Dafür hab ich mir grad einen Algi geschrieben. Den hier zu posten wäre aber net sinnvoll, dafür sieht er zu un-optimiert aus. Kann ihr aber mal kurz erläutern:
1. Name & Mail einlesen
2. aus jedem Buchstaben des Namens den ASCII-Code auslesen und jeden dieser Werte addieren.
3. Das gleich für die E-Mail-Addresse.
4. beide Werte addieren
5. Quersumme daraus bilden
6. Dann noch ein paar kleine andere Umformungen, dann wieder eine Quersumme bilden und (bei mir wird die Quersumme immer so um die 40.000 groß...) dann einen letzten Algorithmus so oft durchlaufen, wie die Quersumme groß ist, dabei bei jedem Schleifendurchlauf ein Zeichen des Namens durch einen anderen ersetzen. Das gleich bei der E-mail-Adresse. Hat man im ersten Durchlauf den Namen auf diese Weise durch eine Buchstaben-Zahlen-Kombination ersetzt, nimmt man diesen neuen String und macht mit ihm das gleiche wie "damals" mit dem Namen. Das ganze ca. 40.000 mal. Das gleich mit der Mail-Adr.. Dann addiert man beide Strings und sowas wie oben kommt dabei rausDürfte jetzt keiner verstehen, sorry. Weiß selber nicht mehr genau, was ich da bene geschrieben habe.
Alles darf ich ja nicht verraten, sonst nützen mir die Codes nachher nichts mehr
Happosai
-
ähh... für mich klingt das nach einfachem......... nicht-wieder-zurückgängen-machbar...
-
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