Hoewel ook ik geen cryptograaf ben weet ik, na wat tests met wachtwoorden in input, en door het bekijken van de source, wel zeker dat dit crapto is en geen crypto. Dat wil echter niet zeggen dat ik elk stukje tekst ook in
korte tijd kan decoderen, maar de kans dat een cryptograaf met de juiste tools dat kan is groot.
Goede cryptografie kenmerkt zich erdoor dat er zoveel permutaties op je plaintext zijn dat het, ook met volledige kennis van het algoritme, je op brute force bent aangwezen zonder dat met aanwijzingen (zoals hierboven genoemd) kunt bespoedigen. De sleutellengte kies je bij de toepassing zodanig dat de naar verwachting benodigde tijd en/of geld de poging tot brute-forcen niet rechtvaardigen.
Waarom is jouw voorbeeld geen goed crypto?
- Er is (bijna) een 1-op-1 relatie tussen de leesbare en "versleutelde" tekst. Voor het mooie worden op het einde van regels versleutelde tekst een "¶" teken geplaatst (dat wordt genegeerd bij decrypten).
- Er is een 1-op-1 relatie tussen de karakters in het wachtwoord en de karakters in de tekst. Na de laatste letter van het wachtwoord gaat het algoritme weer terug naar de eerste letter. Dus de derde letter van het wachtwoord heeft effect op het derde karakter van de tekst, en als het wachtwoord 10 karakters lang is, ook op het 13e, 23e etc. karakter in de tekst.
Een bijwerking hiervan is dat "1234" hetzelfde wachtwoord is als "12341234" en omgekeerd.
- Door het vorige weet je dat uitsluitend het eerste karakter van het wachtwoord het eerste karakter van je versleutelde tekst beïnvloedt. Als je ervan uitgaat dat het eerste karakter een hoofdletter is, is het aantal mogelijkheden beperkt.
- Niet alle tekens worden versleuteld: bijv. éëè en € blijven gewoon "op hun plaats" als plaintext.
- Normaal gesproken eindigen regels met een punt. Daarnaast kan
http://en.wikipedia.org/wiki/Frequency_analysis van pas komen bij het ontcijferen van dit soort teksten. Zie ook de reactie van Anomiem, 2 feb 17:18.
In de tabel hieronder zie je het effect van de "versleuteling". De bovenste regel (achter K¦) geeft de mogelijke tekens in het wachtwoord weer. In de linker kolom staat de plaintekst (ik toon alleen a..z, lang genoeg zo), in de matrix daaronder/naast het "versleutelde" karakter. Dus een plaintekst "a" zal met wachtwoordkarakter "A" tot een "k" leiden etc. En het wachtwoord "ABCDEF" met de tekst "aaaaaaaaaaaa" leidt tot "klmnopklmnop".
Affijn, dit versleutelingsalgoritme is, met wat "quirks" (rechts in de tabel) een per-plaintekst-karakter-ROT-operatie afhankelijk van het "actuele" karakter in het wachtwoord. Dit kun je nauwelijks versleutelen noemen.
K¦ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890`-=[];',./~!@#$%^&*()_+|{}:<>? "\
-------------------------------------------------------------------------------------------------
a¦klmnopqrstuvwxyz{|}~ !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^vwxyz{|}~ooo
b¦lmnopqrstuvwxyz{|}~ !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_wxyz{|}~ ppp
c¦mnopqrstuvwxyz{|}~ !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`xyz{|}~ !qqq
d¦nopqrstuvwxyz{|}~ !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`ayz{|}~ !"rrr
e¦opqrstuvwxyz{|}~ !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abz{|}~ !"#sss
f¦pqrstuvwxyz{|}~ !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abc{|}~ !"#$ttt
g¦qrstuvwxyz{|}~ !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcd|}~ !"#$%uuu
h¦rstuvwxyz{|}~ !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcde}~ !"#$%&vvv
i¦stuvwxyz{|}~ !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdef~ !"#$%&'www
j¦tuvwxyz{|}~ !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefg !"#$%&'(xxx
k¦uvwxyz{|}~ !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefgh!"#$%&'()yyy
l¦vwxyz{|}~ !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghi"#$%&'()*zzz
m¦wxyz{|}~ !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghij#$%&'()*+{{{
n¦xyz{|}~ !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijk$%&'()*+,|||
o¦yz{|}~ !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijkl%&'()*+,-}}}
p¦z{|}~ !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklm&'()*+,-.~~~
q¦{|}~ !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmn'()*+,-./
r¦|}~ !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmno()*+,-./0!!!
s¦}~ !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnop)*+,-./01"""
t¦~ !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopq*+,-./012###
u¦ !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqr+,-./0123$$$
v¦!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrs,-./01234%%%
w¦"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrst-./012345&&&
x¦#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstu./0123456'''
y¦$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuv/01234567(((
z¦%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvw012345678)))
PS de tabel is niet helemaal zichtbaar maar "hij is er wel". Als je alle regels selecteert, kopieert en plakt ion kladblok, zie je de volledige breedte (97 karakters).