Skip to content

Instantly share code, notes, and snippets.

@fabian
Created June 3, 2012 20:23
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save fabian/2864896 to your computer and use it in GitHub Desktop.
Save fabian/2864896 to your computer and use it in GitHub Desktop.
#!/usr/bin/env python
# coding: utf-8
import itertools, math, sys
cipher = u"X$ytkrtllt$v&ssr&tpqhq$&le/tKt*&tkx$*t&$t§Mt&yx$*lwtk&e/ymxz%s*tr&tA%$yk%sstwtkYthe%wtk$t/§t$x$rwtkt&yty/&tkmxt&$t*tsrlhk&ymtc%kTllt&ptr%e/x$vq/kle/t&$s&e/rqllr&tKt*&tkx$*rqwt&t&$t$Q$yt&sc%$§t/kqslHk%mt$ytkvtkwt/&ttl&$t&$t§Wtk&e/yrtkMt&yx$*§q&$&e/&RtkA%$mtk$*tkylt&yrt§Qxlwkxe/rtkAqyqlyk%h/t&§§tkv&trtk/tzy&*x$ytkWtle/xll$&e/y$xkvt&sYthe%&§§tkv&trtkZt/stkx$ytksqxzt$vqkt$§t/kqslmvt&V%e/t$vqkrtkHkl&rt$yc%$Ythe%v&tc%§Tkrw%rt$ctkle/sxeay$x$a$$yt$qxzrt$Qy%§a%$mtk$Le/qrt$ltklqymz%krtkx$*t$&$§t/klytss&*tk§&ss&qkrt$//tmxa%§§t$RtkWklt$vtkyrtlCtkl%k*tkl&lylt&yrt§X$*seax§kx$rHk%mt$y*tzqsst$Kt*&tkx$*le/tz$q%y%Aq$v&ssptymymx§tklyt$§qslt&yrt§Tkrwtwt$x$rQy%§x$zqssc%krkt&V%e/t$r&tAk&lt$kt*&%$wtlxe/t$Tkvtkrtq§Lq§lyq*&$r&ttkrwtwt$mtklykytLyqryK&axmt$yqaqyqx$r&$r&tHkztayxkZxaxl/&§qkt&lt$&$rtkqxe/rql/qcqk&tkytQy%§akqzyvtkalyt/ywtk&e/ytytr&t$qe/k&e/yt$q*t$yxkAn%r%q§Zkt&yq*Ctk§xys&e/z/kyAq$qwtk$&e/yr&ktaymxkQy%§kx&$t&$Zxaxl/&§qQxe/Qxt$§&$&lytk*x&r%VtlytkvtsstZRHv&krq§Lq§lyq*Pqhq$wtlxe/t$§&yrt§Qwlyte/tk$qe/Y%a&%v%ssttkRtxyle/sq$rlL%s&rqk&yy§&yrt§le/vtk*tyk%zzt$t$pqhq$&le/t$C%samx§Qxlrkxeawk&$*t$"
alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
def decrypt(cipher, key):
plain = ""
length=len(cipher)
for j in range(length):
c = cipher[j].upper()
try:
position = key.index(c)
except ValueError:
print "Unknown character: " + c
plain = plain + alphabet[position]
return plain
# Get base key
base = set()
for j in range(len(cipher)):
base.add(cipher[j].upper())
print math.factorial(len(base))
if len(sys.argv) == 2:
stopword = sys.argv[1]
# Try all permutations of base
i = 0
for key in itertools.permutations(base):
i = i + 1
sys.stdout.write("%i\r" % (i))
string = decrypt(cipher, key)
# Found stopword
if string.find(stopword) != -1:
print ''.join(key), string
else:
print "usage: decrypt.py stopword"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment