Stellenanzeige G DATA - Rätsel
-
Hallo,
auf der Internetseite von G DATA und in der c't 07/2008 findet man folgende Stellenanzeige:
std::string gdata::decrypt(std::string m, unsigned char key)
{
std::rotate(m.begin(), m.begin() + m.length() - key, m.end());
std::stringstream ss;
for (std::string::iterator c=m.begin(); c!=m.end(); c++)
ss << (char) ((*c) - key);
return ss.str();
}
std::cout << gdata::decrypt( "F%Fsyn[nwzxL%IFY", KEY) << std::endl;Wer den Code geknackt hat kann sich mit der Lösung bewerben. Ich will mich dort zwar nicht bewerben, aber mich würde trotzdem interessieren was dahinter steckt. Leider habe ich aber nahezu keine Kenntnisse in C++ (nur C# und Java) und ich würde mich daher freuen wenn jemand versucht mir zu erklären was genau man entschlüsseln muss und wie die Lösung ist.
Das dürfte doch für jeden C++-Programmierer eine Herausforderung sein.
gruß
pool
-
Die Lösung sollte einfach zu finden sein. Durch die Subtraktion
*c - keyist der genaue Wert von 'key' ja eigentlich egal, da ein Zeichen nur 256 verschiedene Werte annehmen kann (auf allen gängigen Architekturen), d.h. es müssen nur noch 256 Schlüssel per Brute-Force ausprobiert werden, um die monoalphabetische Verschlüsselung zu knacken.
Die Rotation macht es noch einfacher, damit die Zeiger gültige Werte haben, kommen ja sowieso nurm.size()-viele Werte in Frage./EDIT: Ups, das ist ja nen unsigned char. Dann isses ja noch viel einfacher.
-
Den habe ich schon lange mal gesehen. Ich hatte 1 Minute um den zu "knacken", wobei der grösste Teil der Zeit für das Starten des VC draufging.

-
Key is 5, Lösungwort: G DATA AntiVirus
-
ich möchte lösen schrieb:
Key is 5, Lösungwort: G DATA AntiVirus
Spielverderber.. :p
-
das is ein negativer caesar chiffre.
-
Grottiger Code ... Post-Increment und C-Style-Casts. Wer sich da bewirbt ist sowas von selbst schuld.
-
Bashar schrieb:
Grottiger Code ... Post-Increment und C-Style-Casts. Wer sich da bewirbt ist sowas von selbst schuld.
Boah wie schlimm.
-
Bashar schrieb:
Wer sich da bewirbt ist sowas von selbst schuld.
Das kann ja nur ironisch gemeint sein

-
mikey schrieb:
Bashar schrieb:
Wer sich da bewirbt ist sowas von selbst schuld.
Das kann ja nur ironisch gemeint sein

Ich habe das Gefühl er will nur keine Konkurrenz bei der Bewerbung..

Wobei ich das postinkrement hier gar nicht so schlecht finde. (Mal genau hinschauen.. :D)
-
drakon schrieb:
Wobei ich das postinkrement hier gar nicht so schlecht finde.
Warum?

-
c++ sieht besser aus als ++c
-
for (std::string::iterator c=m.begin(); c!=m.end(); c++)

-
...ach so, na dann sind ja alle Klarheiten beseitigt.

-
jo.. dass das n caeser-like shift um einen key ist sieht man ziemlich schnell
(nicht unbedingt ein negativer ceaser shift, der key ist ein integer kann also selbst negativ sein -(-) = +)aber um ehrlich zu sein finde ich das ist... naja es ist ganz lustig so ein kleines spielchen bevor man sich bewirbt um totale anfänger irgenwdie rauszufiltern
aber blos weil man nen schlecht gecodeten algorithmus (ja der code ist wirklich hässlich) versteht.. das ist ziemlich nichtssagend
die hätten lieber sowas reintun sollen wie 2 klassen wobei die eine von der anderen erbt und dann soll man bei der bewerbung ne a4 seite dazu schreiben was man davon hält (untertypen beziehung erfüllt? keine zusicherungen verletzt? macht vererbung dafür sinn? andere lösung?)
sowas würde viel mehr über denjenigen aussagen der sich bewirbtachja und.. diese postincrements bei integern sind sowas von egal, wenn ich das 10000 mal mache spare ich mir vllt 0.1 millisekunden rechenzeit?
wenn ich vielleicht mit ganzen objekten arbeite die den ++ operator überladen haben und dann kopien davon angelegt werden müssten lasse ich mir ein preincrement einreden, bei iteratoren mache ich es zb, aber bei integern .. naja
-
@Bashar
zustimm. wahrscheinlich vom personalchef *g*@Vevusio
dein beispiel erinnert mich an die prüfung für eine softwarevorlesung