BlackBoard » Design, Programmierung & Entwicklung » Programmieren » C++ - Frage Geheimsprache » Hallo Gast [Anmelden|Registrieren]
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen
Seiten (2): [1] 2 nächste » Neues Thema erstellen Antwort erstellen
Zum Ende der Seite springen Geheimsprache
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
bluesky bluesky ist männlich
Aufsteiger


Dabei seit: 08.11.2002
Beiträge: 59
Herkunft: Willich

Geheimsprache       Zum Anfang der Seite springen

HI ...

Ich wollte ein programm schreiben das normalen Text in eine selbst ausgedachte "geheimsprache" umsetzt ...
einzelne buchstaben sind ja kein problem nur ich hab keine ahnung wie ich das mit ganzen wörtern machen soll : dafür müsste das wort doch eigentlich in alle buchstaben zerlegt werden dann die buchstaben durch die von der geheimsprache ersetzt werden und dann wieder zusammengesetzt werden ... oder seh ich das falsch ? smile

und ich hab ehrlich gesagt voll keine ahnung wie man das mit C++ macht !

ach ja : ich progge mit dem Borland C++ Builder ( damit alles nachher was schöner is Augenzwinkern

schonmal thx ...
16.08.2003 21:20 bluesky ist offline E-Mail an bluesky senden Beiträge von bluesky suchen
phlox81 phlox81 ist männlich
Bote des Lichts und Moderator


images/avatars/avatar-2264.jpg

Dabei seit: 19.10.2002
Beiträge: 3.028
Herkunft: Irgendwo im Nirgendwo

      Zum Anfang der Seite springen

Hm, also wenn du ganze wörter in andere Wörter umwandeln willst,
schau dir mal den STL Container Map an, da kannst du strings miteinander
verknüpfen.

Devil

__________________
Intelligenz ist eine Illusion des Menschen

phlox81.de | codenode.de
16.08.2003 21:44 phlox81 ist offline E-Mail an phlox81 senden Homepage von phlox81 Beiträge von phlox81 suchen
bluesky bluesky ist männlich
Aufsteiger


Dabei seit: 08.11.2002
Beiträge: 59
Herkunft: Willich

Themenstarter Thema begonnen von bluesky
      Zum Anfang der Seite springen

"STL Container Map" ??? <- sagt mir nichts
17.08.2003 12:53 bluesky ist offline E-Mail an bluesky senden Beiträge von bluesky suchen
phlox81 phlox81 ist männlich
Bote des Lichts und Moderator


images/avatars/avatar-2264.jpg

Dabei seit: 19.10.2002
Beiträge: 3.028
Herkunft: Irgendwo im Nirgendwo

      Zum Anfang der Seite springen

Hm, du weist was die STL ist ?
Da gibts ne datenstruktur die nennt sich map<key, value>;
Damit kannst du dann zwei strings miteinander Verknüpfen.

Devil

__________________
Intelligenz ist eine Illusion des Menschen

phlox81.de | codenode.de
17.08.2003 14:37 phlox81 ist offline E-Mail an phlox81 senden Homepage von phlox81 Beiträge von phlox81 suchen
CDW CDW ist männlich
eine Simulation


Dabei seit: 12.10.2002
Beiträge: 1.329
Herkunft: CreateRemoteThread

      Zum Anfang der Seite springen

hm, mach doch nen char array (zum beispiel von char array[80]), dann ließt du deinen Text immer blockweise in diesen array ein - und dann kannst du ihn ganz bequem bearbeiten(z.b):
for (int i=0;i<=80;i++)
{
if (toupper(array[i])=='C' ) { array[i]='G(eheimzeichen)' }
if (toupper(array[i])=='A' ) { array[i]='G(eheimzeichen)' }

}
und dann wieder den nächsten Block einlesen...

(nun ja, ich wusste nicht mehr, wie man case in C richtig schreibt Augenzwinkern deshalb auch die ifs.
betrachte doch die Wörter als abfolgen von Zeichen - streng genommen brauchts du die doch nicht auseinander zu zerlegen - nur auf jeden Buchstaben zugreifen können. Und ich würde mir die Sache mit den zeigern auf Strings usw nicht antun. Denn wenn ich dich richtig verstanden hab, willst du nur die Buchstaben ersetzen durch eigendefenierte und nicht die Wörter.
allgemeingültig würde ich ungefähr so was verwenden (lässt sich meines Wissens nach auch in C relativ einfach umsetzen):

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
datenstruktur:
        Array von 80 zeichen;
Ablauf:
        öffne die Textdatei;
        lese die ersten 80 zeichen in den Array ein
        gehe zeichen für zeichen durch, ersetze falls notwendig
        speichere den Array in einer neuen datei;
  mach so lange weiter bis Textdatei zu ende
17.08.2003 16:32 CDW ist offline E-Mail an CDW senden Homepage von CDW Beiträge von CDW suchen
phlox81 phlox81 ist männlich
Bote des Lichts und Moderator


images/avatars/avatar-2264.jpg

Dabei seit: 19.10.2002
Beiträge: 3.028
Herkunft: Irgendwo im Nirgendwo

      Zum Anfang der Seite springen

einen Buchstaben durch einen anderen zu ersetzen ist aber keine sehr gute Idee.
So etwas lässt sich schon mit papier und bleistift sehr leicht decodieren.

Die Frage ist ja, ob er Zeichenweise codieren will, oder ganze Wörter durch
die Wörter der Geheimsprache ersetzen will.

Devil

__________________
Intelligenz ist eine Illusion des Menschen

phlox81.de | codenode.de

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von phlox81: 17.08.2003 18:53.

17.08.2003 18:53 phlox81 ist offline E-Mail an phlox81 senden Homepage von phlox81 Beiträge von phlox81 suchen
bluesky bluesky ist männlich
Aufsteiger


Dabei seit: 08.11.2002
Beiträge: 59
Herkunft: Willich

Themenstarter Thema begonnen von bluesky
      Zum Anfang der Seite springen

ne ich möchte zeichenweise codieren ...
also jeden buchstaben durch den der geheimsprache ersetzen ..
17.08.2003 20:22 bluesky ist offline E-Mail an bluesky senden Beiträge von bluesky suchen
Compuholic Compuholic ist männlich
knows where he wants to go tomorrow


images/avatars/avatar-552.jpg

Dabei seit: 19.10.2002
Beiträge: 819
Herkunft: München

      Zum Anfang der Seite springen

Wenn es ein bestimmtes Muster gibt, nachdem die Buchstaben vertauscht werden sollen, dann gibt es eine sehr effiziente Lösung. Ich hab einfach den einfachsten Fall programmiert. Es fehler natürlich eine Menge Überprüfungen (z.B. was passiert, wenn das ASCII-zeichen 255 verschlüsselt wird). So wie ich das jetzt programmiert habe ist das Programm nicht binary safe. Außerdem muß immer Sorge getragen werden, daß der String NULL-terminiert ist (was aber kein Problem darstellen sollte):

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
char Plaintext[] = "BlahBlubb";
char *ptr = Plaintext;

while (*ptr)
{
	*ptr += 3;    //wenn jeder Buchstabe durch das ASCII-Zeichen ersetzt werden soll, was 3 Zeichen hinter ihm liegt.
	ptr++;
}


Wenn Du die Buchstabenreihenfolge selbst wählen willst, mußt Du zwangsläufig ein Array, wie CDW es vorgeschöagen hat verwendet. C++ für so ein kleines Programm zu verwenden ist eigentlich Unsinn. Da tut es normales C genauso.
17.08.2003 21:47 Compuholic ist offline E-Mail an Compuholic senden Homepage von Compuholic Beiträge von Compuholic suchen
CDW CDW ist männlich
eine Simulation


Dabei seit: 12.10.2002
Beiträge: 1.329
Herkunft: CreateRemoteThread

      Zum Anfang der Seite springen

nein, ich kann kein C, aber diese kleine Lösung funktioniert bei mir ganz gut (Icc 32 Compiler,fast ANSI-C):
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#define MAX_BUCHSTABEN 26
#define MAX_BUF 80

char tabelle[MAX_BUCHSTABEN]={'A','C','B','D','O','F','G','H','I','J',
                              'K','L','M','N','E','P','Q','R','S','T','U',
                               'V','W','X','Y','Z'};
char buffer[MAX_BUF];

void einlesen (char *buf)
{
   gets(buf);
}

void ersetzen (char *buf)
{
	int i=0;
	do
		if (isalpha(buf[i])) /*leerzeichzen usw werden ignoriert*/
			buf[i]=tabelle[(toupper(buf[i])-'A')]; /*jeder buchstabe besitzt nen ASCII Wert,*/
	while(buf[i++]);                               /*davon ziehen wir den Wert von A ab (erster buchstabe)*/
}                                                  /*so können wir auf die Tabelle direkt zugreifen*/

void ausgeben (char *buf)
{
  printf("Ersetzter Text \n");
  puts(buf);
  getchar(); /*damit das programm sich nicht sofort schließt und wir die Ausgabe bewundern können*/
}

int main(void)
{
  einlesen(buffer);
  ersetzen(buffer);
  ausgeben(buffer); /*stattdessen kann man auch irgendwo speichern*/
  return 0;
}

Hm, kleine Erklärung:
Tabelle ist ein char array von 26, wo die ganzen 'Geheimzeichen' in Alphabetreihenfolge stehen (das heißt original A,B,C,D usw) - ich habe nur einige vertauscht, damit man es noch sieht.Vertauschen kann man nach belieben.
vom Prinzip basiert es darauf, dass ja jeder buchstaben einen ASCII Wert hat ('A' fängt bei 65 an), somit hab ich mir gedacht, machst du einfach ne Tabelle, wo du den Buchstabenwert als Index benutz. Damit man keine Tabelle von 91 braucht (da die Großbuchstaben erst beim Wert von 65 anfangen), ziehe ich den Wert von 'A' vorher ab - es gibt auch nur großbuchstaben und keine überprüfung beim Einlesen auf eventuellen Überlauf (ist aber im Prinzip nicht schwer zu realisieren).Man kann stattdessen auch einen File einlesen und auch abspeichern (bei C++ ist sicherlich cin/cout bequemer, jedoch wollte ich jetzt nicht noch in C++ Büchern blättern Augenzwinkern )
Auf jeden fall wird in :
code:
1:
buf[i]=tabelle[(toupper(buf[i])-'A')]

nachgeschaut, welche Zeichen bei Eingabe 'B' für eben dieses 'B' eingesetzt werden soll - in der Tabelle steht für 'B' ein 'C' (Buchstabenreihenfolge beachten)

Edit: wenn ich mich nicht irre, ist es ANSI-C und müsste deshalb auch mit jedem anderen compiler/plattform laufen(jedenfalls den Icc-win32 auf ANSI-C Code gestellt und der hat nicht gemekert) .

Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von CDW: 18.08.2003 15:42.

18.08.2003 15:28 CDW ist offline E-Mail an CDW senden Homepage von CDW Beiträge von CDW suchen
bluesky bluesky ist männlich
Aufsteiger


Dabei seit: 08.11.2002
Beiträge: 59
Herkunft: Willich

Themenstarter Thema begonnen von bluesky
      Zum Anfang der Seite springen

vielen dank @ CDW - dein code funzt perfekt da gibt es nur ein problem :
die zeichen aus meiner "sprache" beinhalten mehr als nur ein zeichen...
also sagen wir einfach mal für "a" = "3--" <- wenn ich das so mache also für das a ein "3--" einsetze kommt nachher ein "-" raus , wie kommt das :\ `?
18.08.2003 17:34 bluesky ist offline E-Mail an bluesky senden Beiträge von bluesky suchen
Compuholic Compuholic ist männlich
knows where he wants to go tomorrow


images/avatars/avatar-552.jpg

Dabei seit: 19.10.2002
Beiträge: 819
Herkunft: München

      Zum Anfang der Seite springen

Das kommt daher, weil man in C eine "echte" Programmiersprache hat *g*.

Wenn man mit Strings (Zeichenketten) arbeitet, hat man immer einen Pointer (eine Variable die eine Speicheradresse anthält) auf das erste Zeichen des Strings. Von da aus wird dann byteweise weitergelesen, bis man auf eine Speicherzelle stößt in der der Wert NULL steht. Das Problem tritt auch in deinem Programm auf.

Das Array in dem die "Geheimzeichen" stehen ist ein Array vom Typ char. Daß heißt jedes Element in diesem Array ist ein Byte groß und kann daher 1 Buchstaben fassen. Ich vermute, daß wenn Du einem Element versuchst einen Wert '3--' zuzuweisen, daß der Compiler dann einfach den letzten Wert nimmt. Mit mehreren Buchstaben wird das Programm schon wesentlich komplizierter, weil Du

1. Nicht voraussehen kannst, wie groß der Ciphertext wird. Daher mußt du mit dynamischer Speicherverwaltung arbeiten.

2. Das Array mit den Geheimzeichen als char[2][] oder char [3][] oder was auch immer (auf jeden aber Fall 2-dimensional) deklarieren mußt.

3. Wenn du 2. anwendest Du auch die Zeile zum Ersetzen ändern mußt, weil sich dadurch auch der Offset der Array-Elemente ändert.
18.08.2003 17:46 Compuholic ist offline E-Mail an Compuholic senden Homepage von Compuholic Beiträge von Compuholic suchen
CDW CDW ist männlich
eine Simulation


Dabei seit: 12.10.2002
Beiträge: 1.329
Herkunft: CreateRemoteThread

      Zum Anfang der Seite springen

es war eine Lösung von vielen - man könnte es auch mit vielen Case Anweisungen oder IFS umsetzen.
Hm, mehrere Zeichen könnte man auch umsetzen, dafür muss man beim ersetzen die Zeigergröße entsprechend anpassen(z.b über einen selbstdefenierten Type von 3 Byte Größe) und noch einen zusätzlichen Buffer für die "übersetzung" schaffen (etwa so: if (buffer[i]=='A') (uebersetzungs_buf[i]='3--') (dabei die übersetzungs_buffergröße anpassen);
ich überlasse hier das Feld denen, die des C mächtig sind, jedenfalls wäre das in Asm oder Pascal kein Problem Augenzwinkern ...
aber: das größte Problem wäre bei dieser Art der Geheimsprache die Übersetzung - wenn man nicht mehr Buchstabe für Buchstabe durchgehen kann, muss man sich was einfallen lassen - auf jeden fall viel mehr Aufwand(besonders wenn es nicht nur 3 Zeichen sein sollen, sondern auch mehr oder weniger gleichzeitig) und wofür? - das Verfahren lässt sich relativ einfach entschlüsseln...
18.08.2003 20:43 CDW ist offline E-Mail an CDW senden Homepage von CDW Beiträge von CDW suchen
Kalka Kalka ist männlich
BlackBoarder


Dabei seit: 16.03.2002
Beiträge: 856

      Zum Anfang der Seite springen

hmm, ich hab im Moment nichts zu tun da hab ich einfach mal nen kleines Verschlüsselungs-Programm geschrieben, vielleicht hilft es weiter..und verbessern kann man es auch noch Augenzwinkern

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
#include <stdio.h>
#include <string.h>
#include <windows.h>

FILE *f;
FILE *f2;
bool decrypt=true;

//zum (de)crypten
int crypt(char key)
{
	char zeichen;
	while ( (zeichen = getc(f)) != EOF)
	{
		switch(zeichen)
		{
		case '\n':					//aus Zeilenumbrüche mache Tabs
			{
				zeichen = '\t';
				fputc(zeichen,f2);
				break;
			}
		case '\t':
			{
				zeichen = '\n';		//aus Tabs mache Zeilenumbrüche
				fputc(zeichen,f2);
				break;
			}
		default:
			{
				if (decrypt)		//Welche Richtung? Crypten oder decrypten?
					zeichen += key;
				else
					zeichen -= key;
				fputc(zeichen,f2);
			}
		}	
	}
	return 0;
}


int main(int argc, char *argv[])
{
	int t1;
	int t2;

	//Hilfe!
	if (argc != 5)
	{
		printf("Crypter(c) by Kalka\n");
		printf("Usage %s <File1> <File2> <Key> <c(rypt)/d(ecrypt)>\n",argv[0]);
		printf("Example: %s c:\\test.txt c:\\test2.txt A c\n",argv[0]);
		return 0;
	}

	f  = fopen(argv[1],"r");
	f2 = fopen(argv[2],"w");

	if (argv[4][0] == 'c')
	{
		decrypt = false;
	}

	//Datei vorhanden?
	if (f == NULL)
	{
		printf("Error: File not found.");
		return 1;
	}

	t1 = GetTickCount();
	crypt(argv[3][0]);
	t2 = GetTickCount();
	printf("\nTime: %d milliseconds\n",t2-t1);

	fclose(f);
	fclose(f2);
	return 0;
}


über die Eingabeaufforderung (Windows) aufrufen und zwar so:

[Programm] c:\zu crypten.txt c:\outpu.txt X c

Parameter:
1: die datei, die Ver/Ent-schlüsselt werden soll
2: da soll sie hingeschrieben werden (die ent/ver-schlüsselte Datei)
3: einen Key, aber nur ein Zeichen - welcher ist egal (1,2,a,",.,...)
4: ein "c" oder "d" zum crypten oder decrypten...

ich weiß, schlimmer Stil :-s..aber er functioniert Zunge raus

cu Kalka

__________________
In wirklichkeit sind wir alle kleine grüne Kaninchen!

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Kalka: 21.08.2003 14:42.

19.08.2003 04:13 Kalka ist offline E-Mail an Kalka senden Homepage von Kalka Beiträge von Kalka suchen
bluesky bluesky ist männlich
Aufsteiger


Dabei seit: 08.11.2002
Beiträge: 59
Herkunft: Willich

Themenstarter Thema begonnen von bluesky
      Zum Anfang der Seite springen

@Kalka thx das sieht ja schon gut aus aber :
ich raff da so einiges nich :
-wo kommen die "Geheimzeichen" hin
-wie funzt das ??????????? großes Grinsen
20.08.2003 14:29 bluesky ist offline E-Mail an bluesky senden Beiträge von bluesky suchen
Kalka Kalka ist männlich
BlackBoarder


Dabei seit: 16.03.2002
Beiträge: 856

      Zum Anfang der Seite springen

die Geheimzeichen kommen in die Datei, die man als zweiten Parameter angibt. Der liest immer ein Zeichen aus der Orginalen (oder Verschlüsselten) Datei aus, und schreibt es dann verändert (mit dem Key addiert) in die zweite datei..

cu Kalka

__________________
In wirklichkeit sind wir alle kleine grüne Kaninchen!
21.08.2003 14:40 Kalka ist offline E-Mail an Kalka senden Homepage von Kalka Beiträge von Kalka suchen
Cracker Cracker ist männlich
Neuling

Dabei seit: 21.08.2003
Beiträge: 8
Herkunft: aus'm Internet ;)

Augenzwinkern Geheimsprache in Visual Basic       Zum Anfang der Seite springen

Kann mir jemand den ganzen c++ Quellcode in VB umschreiben??
---> Ich benutze Visual Basic 6.0

__________________
Ich lerne zur Zeit die Sprache Visual Basic 6.0. Mein Hobby ist zu hacken. Ich knacke zu gerne Passwörter und schreibe für mein Leben gern Viren und Würmer.
21.08.2003 15:40 Cracker ist offline Beiträge von Cracker suchen
bluesky bluesky ist männlich
Aufsteiger


Dabei seit: 08.11.2002
Beiträge: 59
Herkunft: Willich

Themenstarter Thema begonnen von bluesky
      Zum Anfang der Seite springen

@ Kalka in welcher "form" müssen die zeichen in die datei ?
zb so : "'a','b','c'..." oder so : "a , b , c , d..." oder ka smile ..
ach ja : wnen ich das prog bei mir compiliere und starte kommt das :

"Crypter by Klaka" is klar ... Augenzwinkern
"Usage ...."
"Example ..."
"Press any key to continue"

so und wenn man dann was drückt schließt der das prog ..
22.08.2003 12:55 bluesky ist offline E-Mail an bluesky senden Beiträge von bluesky suchen
Kalka Kalka ist männlich
BlackBoarder


Dabei seit: 16.03.2002
Beiträge: 856

      Zum Anfang der Seite springen

@bluesky:

ja das ist auch so richtig, denn du musst das Programm dann nachher über die EIngabeaufforderung starten (Start/Programme/Zubehöhr/Eingabeaufforderung oder W2k: Start/Ausführen cmd.exe)

Die Zeichen in die Datei? Na so:

code:
1:
2:
3:
Das ist der Inhalt einer Textdatei


also im Grunde ganz normal Augenzwinkern

cu Kalka

__________________
In wirklichkeit sind wir alle kleine grüne Kaninchen!
24.08.2003 00:26 Kalka ist offline E-Mail an Kalka senden Homepage von Kalka Beiträge von Kalka suchen
phlox81 phlox81 ist männlich
Bote des Lichts und Moderator


images/avatars/avatar-2264.jpg

Dabei seit: 19.10.2002
Beiträge: 3.028
Herkunft: Irgendwo im Nirgendwo

      Zum Anfang der Seite springen

Hm, schaut doch mal im bb unter Projekte.
Da gibts von mir ein Programm (nennt sich Cipher)
welches Dateien mit Passwort und Xor verschlüsselt,
ist ein wenig sicherer als die hier propagierten Methoden...

Devil

__________________
Intelligenz ist eine Illusion des Menschen

phlox81.de | codenode.de
24.08.2003 01:15 phlox81 ist offline E-Mail an phlox81 senden Homepage von phlox81 Beiträge von phlox81 suchen
bluesky bluesky ist männlich
Aufsteiger


Dabei seit: 08.11.2002
Beiträge: 59
Herkunft: Willich

Themenstarter Thema begonnen von bluesky
      Zum Anfang der Seite springen

@ Devil81

thx aber :
mein prog soll einfach nur einen text in einen anderen umwandeln so das man den umgewandelten Text z.b.: per eMail verschicken kann ...
26.08.2003 20:07 bluesky ist offline E-Mail an bluesky senden Beiträge von bluesky suchen
Seiten (2): [1] 2 nächste » Baumstruktur | Brettstruktur
Gehe zu:
Neues Thema erstellen Antwort erstellen
BlackBoard » Design, Programmierung & Entwicklung » Programmieren » C++ - Frage Geheimsprache

Forensoftware: Burning Board 2.3.6, entwickelt von WoltLab GmbH