Falscher Zeichensatz?

Hallo, ich habe folgendes Problem:
Ich habe diesen Code hier:

zgjdx~knb`k~l`bghmd{rnesv`qd{l???Ž?Ž??{v?￾?Ž??{b????￾?u????Ž￾{q?￾|

und ich weiss auch schon was raus kommt wenn man ihn richtig entschlüsselt,das hier:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]

mir ist schon klar, dass das ganze irgendwas mit caesar und so zu tun hat nur bekomme ich kein richtiges Ergebnis, wenn ich es mit dem normalen Alphabet versuche...
Also dachte ich, ich probier als Zeichensatz mal ASCII aus aber das würde wahrscheinlich auch nicht funktionieren, da im verschlüsselten Text Zeichen vorkommen, die im ASCII nicht vorkommen.

Wäre nett, wenn ihr sagen könntet ob ich überhaupt auf dem richtigen Weg bin und wenn ja, was mit dem Zeichensatz nicht stimmt.
 
Das ist ein fehlerhafter Cäser :

PlainText + 31 = CypherText

ohne "wraparound".
 
Ja, nur verstehe ich nicht ganz welchen Zeichensatz man verwenden muss.
Beispielsweise tritt dieses Zeichen oftmals auf: "Ž"
Das kann ich aber nirgens in der Tabelle finden (und das ist nur eins von mehreren.
Was mache ich falsch?
 
An Unicode dachte ich auch schon nur würde das mit der Verschiebung dann nicht mehr hinhauen, mal abgesehen davon hätte ich keinen Plan, wie ich dafür ein Programm schreiben sollte.
Hat jemand eine Lösung?
 
wie merker schon bemerkt hat (hach bin ich heut wieder lustig :D), es is n caesar-31. das heisst, zu jedem ascii-charcode(nicht zum alphabetischen zeichen!) des plaintexts wurde 31 dazuaddiert und am ende des strings wurde was drangehängt. wenn du ein programm zum entschluesseln schreiben willst, einfach bei jedem zeichen 31 abziehen und voila. so einfach is datt. vielleicht sollte man doch alle antworten lesen und nicht genau die richtigen ignorieren und munter weiter ueber unicode diskutieren ;)
c-code(daten sind in in.txt gespeichert):
Code:
#include <stdio.h>

int main()
{
char tmp = '';
FILE* ff = fopen("in.txt", "rb");
while(tmp!=EOF) {
tmp=getc(ff);
putc(tmp-31, stdout);
}
getc(stdin);
return 0;
}


mfg jacky
 
Man sollte es nicht glauben aber wie schon gesagt: Das mit den 31 Zeichen hab ich kapiert nur bleibt dennoch die Frage offen, wo Zeichen wie z.B. "Ž"
herkommen, denn die stehen nicht im ASCII Zeichensatz. Und wo nichts da is kann man auch nichts verschieben!
Deshalb kam auch die Diskusion über Unicode zustande, da dort so ein Zeichen existiert.
Falls noch jemand Lösungsansätze hat, so möge er sie bitte posten ;D
 
also in meinem ascii-zeichensatz is das Ž vorhanden. char-code 142.
edit: sorry gibt wohl bissl verschiedene, aber es is trotzdem definitiv ascii. unicode wär jeder buchstabe 2 byte groß, würd sich von deinem vorgegebenen ergebnis nicht hingehen. ausserdem, was passt dir denn an meinem lösungsansatz nicht? funktioniert bei mir ausgezeichnet.

mfg
 
@Skycrasher
..wo Zeichen wie z.B. "Ž" herkommen, denn die stehen nicht im ASCII Zeichensatz.
Entscheidend ist nicht das Zeichen sondern der Wert der dem Zeichen zugeordnet wurde. Im "ASCII-Code" sind nur die Zeichen von 0..127 international "genormt". Alles von 128..255 unterliegt länderspezifischen Konventionen. Ver- und Entschlüsselung läuft deshalb niemals über Zeichen sondern nur über ihren Wert in der ASCII-Tabelle. Wenn Du weisst welchen Wert das Zeichen "Ž" hat, dann hast Du auch die Lösung.

@heinzelJacKy
Eine "Einfache Gruppenverarbeitung" lässt "drangehängtes" auf wundersame Weise verschwinden :-)

Code:
#include <stdio.h>

int main()
{
char tmp = '';
FILE* ff = fopen("in.txt", "rb");
tmp=getc(ff);
while(tmp!=EOF) {
putc(tmp-31, stdout);
tmp=getc(ff);
}
getc(stdin);
return 0;
}
 
Achso, das mit der unterschiedlichen Norm erklärt so einiges, danke dafür!
Wo finde ich die ganzen länderspezifischen Tabellen? Ich habe schon ein bisschen gegoogelt aber bisher noch nichts brauchbares gefunden!
 
Danke für den Link, doch auch hier fehlen Zeichen, welche z.B. im Plaintext vorhanden sind, beispielsweise "\" .
Also scheint auch das nicht die Lösung des Problems zu sein :(
 
na die lösung wurde bereits genannt ;-)

Entscheidend ist nicht das Zeichen sondern der Wert der dem Zeichen zugeordnet wurde

wenn du dann noch den programmcode nimmst der gepostet wurde hast du deine lösung. da kannst du deine lösung mit berechnen lassen. wenn du das per hand machen willst, musst du rausfinden, welcher zeichensatz verwendet wird, und dann die entsprechende tabelle zur hand nehmen (links sind ja auch gepostet). da addierst du dann zu den zahlenwerten der zeichen immer 31 dazu. falls du wissen willst was mit zeichen passiert, die außerhalb der werte liegen, veränder doch einfach den code oder schreibe dir n einzeiler, der nur ne ausgabe von dem zeichen macht. dann siehst du ja obs n fehler gibt oder was passiert ;-)
 
Egal auf welcher Tabelle ich nachschaue "Ž" weniger 31 ergibt niemals "\" !

"Ž" weniger 31 ergibt "o" -> 142 - 31 = 111 -> 0x8E - 0x1F = 0x6F
"{" weniger 31 ergibt "\" -> 123 - 31 = 92 -> 0x7B - 0x1F = 0x5C

An die Werte kommst Du in dem Du Dir den verschlüsselten Text mit einem Hex-Editor ansiehst.

heinzelJacKy's Lösung erledigt das auch automatisch.
 
Anscheinend reden wir hier alle aneinander vorbei...

"Ž" weniger 31 ergibt "o" -> 142 - 31 = 111 -> 0x8E - 0x1F = 0x6F
"{" weniger 31 ergibt "\" -> 123 - 31 = 92 -> 0x7B - 0x1F = 0x5C

Wie du sehr richtig sagst ergibt "Ž" weniger 31 "o"
...das sollte es aber nicht...
"Ž" weniger 31 sollte "\" ergeben, und das tut es nicht!!!
Das bedeutet logischerweise, dass der gesuchte Zeichensatz noch immer nicht gefunden ist!!!
 
Gibt es die Verschlüsselung auch in "original"? Also als Datei, so dass man nicht auf Gedeih und Verderb der Browserinterpretierung ausgeliefert ist. Zeichensatz hat nämlich imho nichts mit dem Problem zu tun, sonst würde die Verschlüsselung innerhalb des Alphabets bleiben. Ich würde sogar wetten, dass wir im Moment vollkommen unterschiedliche Zeichen in diesem String (und den Zitaten) sehen - je nach dem wie der Browser eingestellt ist (Auto-Erkennung, ISO Dings oder Unicode). Deswegen sollte man die Datei byteweise bzw. in einem Hexeditor betrachten und sich nicht den Kopf über Zeichensatz zerbrechen. Du könntest also einfach die Datei anhängen, so dass alle eine gemeinsame Grundlage hätten ;)
 
"Ž" weniger 31 sollte "\" ergeben, und das tut es nicht!!!
Vielleicht löst eine Art "PlainTextAttack" das Problem :

zgjdx~knb`k~l`bghmd{rnesv`qd{l???Ž?Ž??{v?￾?Ž??{b????￾?u????Ž￾{q?￾|
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]

Jetzt müsste ein "Ž" immer über dem "\" stehen.

@CDW
Was ist denn ein "ISO Dings" ? :-)
 
Zurück
Oben