fork download
  1. #!/usr/bin/env python2.7
  2.  
  3. import time, sys
  4. import base64
  5.  
  6. def charseq(start, length):
  7. start = ord(start)
  8. return ''.join(chr(start + i) for i in xrange(length))
  9.  
  10. b64table = charseq('A', 26) + charseq('a', 26) + charseq('0', 10) + '+/'
  11.  
  12. def shift_b64(c, offset):
  13. if c == '=': return c
  14. idx = b64table.find(c)
  15. assert idx >= 0
  16. return b64table[(idx + offset) % len(b64table)]
  17.  
  18. def encode(s, offset=0, maxlen=48):
  19. s = base64.b64encode(s)[:maxlen]
  20. return ''.join(shift_b64(c, offset) for c in s)
  21.  
  22.  
  23. def findfixes(offset):
  24. for c in b64table:
  25. c2 = encode(c, offset, 1)
  26. if c2 == c:
  27. yield c
  28.  
  29. for offset in xrange(64):
  30. print '{:>2} {!r}'.format(offset, list(findfixes(offset)))
  31.  
  32.  
  33. #s = '1saddsadsadsa'
  34. #
  35. #for offset in xrange(-3, 3):
  36. # print offset
  37. # for _ in xrange(25):
  38. # s = encode(s, offset)
  39. # print s
  40. # print
  41.  
Success #stdin #stdout 0.11s 8832KB
stdin
Standard input is empty
stdout
 0 ['V']
 1 ['W', 'X']
 2 ['Y', 'a']
 3 ['Z', 'b']
 4 ['c', 'd']
 5 ['e']
 6 ['f']
 7 ['g', 'h']
 8 ['i']
 9 ['j']
10 ['k', 'l']
11 ['m']
12 ['n']
13 ['o', 'p']
14 ['q']
15 ['r']
16 ['s', 't']
17 ['u']
18 ['v']
19 ['w', 'x']
20 ['y']
21 ['z']
22 []
23 []
24 []
25 []
26 []
27 []
28 []
29 []
30 []
31 []
32 []
33 []
34 []
35 []
36 []
37 []
38 []
39 []
40 ['0']
41 ['1']
42 ['2']
43 ['3', '4']
44 ['5']
45 ['6']
46 ['7', '8']
47 ['9']
48 ['A']
49 ['B']
50 ['C', 'D']
51 ['E']
52 ['F', '+', '/']
53 ['G', 'H']
54 ['I']
55 ['J']
56 ['K', 'L']
57 ['M']
58 ['N']
59 ['O', 'P']
60 ['Q']
61 ['R']
62 ['S', 'T']
63 ['U']