fork download
  1. import string
  2. from Crypto.Util.number import long_to_bytes
  3. LOWERCASE_OFFSET = ord("a")
  4. ALPHABET = string.ascii_lowercase[:16]
  5.  
  6. def b16_encode(plain):
  7. enc = ""
  8. for c in plain:
  9. binary = "{0:08b}".format(ord(c))
  10. #turns it into bits
  11. enc += ALPHABET[int(binary[:4], 2)]
  12. #first 4 bits into binary, then takes the first 16 chars
  13. enc += ALPHABET[int(binary[4:], 2)]
  14. #last 4 bits into binary, then takes the first 16 chars
  15. return enc
  16.  
  17. def shift(c, k):
  18. t1 = ord(c) - LOWERCASE_OFFSET #position
  19. t2 = ord(k) - LOWERCASE_OFFSET #position
  20. return ALPHABET[(t1 + t2) % len(ALPHABET)] #position of t1 + t2, caesar
  21. """
  22. flag = "redacted"
  23. key = "redacted"
  24. assert all([k in ALPHABET for k in key])
  25. assert len(key) == 1
  26. #key is a letter, hence brute forceable
  27.  
  28. b16 = b16_encode(flag)
  29. enc = ""
  30. for i, c in enumerate(b16):
  31. enc += shift(c, key[i % len(key)])
  32. print(enc)
  33.  
  34. enc = ""
  35. """
  36. def deshift(c, key):
  37. t1 = ord(c) - ord('a') #we dont know
  38. t2 = ord(key) - ord('a')
  39. #to find original just do
  40. return ALPHABET[(t1-t2)%len(ALPHABET)]
  41.  
  42. for i in range(26):
  43. #guess the key
  44. enc = "fegdeogdgecoeocgcgchcfcffccfca"
  45. key = chr(i+ord('a'))
  46. temp = ""
  47. for j,c in enumerate(enc):
  48. temp += deshift(c, key)
  49. print(temp)
  50. pt = ""
  51. for k in range(0, len(temp), 2):
  52. print(ALPHABET.index(temp[k]), ALPHABET.index(temp[k+1]))
  53. a = ALPHABET.index(temp[k])
  54. b = ALPHABET.index(temp[k+1])
  55. c = a << 4 | b
  56. pt += chr(c)
  57. print(pt)
  58.  
Success #stdin #stdout 0.02s 8376KB
stdin
Standard input is empty
stdout
fegdeogdgecoeocgcgchcfcffccfca
(5, 4)
(6, 3)
(4, 14)
(6, 3)
(6, 4)
(2, 14)
(4, 14)
(2, 6)
(2, 6)
(2, 7)
(2, 5)
(2, 5)
(5, 2)
(2, 5)
(2, 0)
TcNcd.N&&'%%R% 
edfcdnfcfdbndnbfbfbgbebeebbebp
(4, 3)
(5, 2)
(3, 13)
(5, 2)
(5, 3)
(1, 13)
(3, 13)
(1, 5)
(1, 5)
(1, 6)
(1, 4)
(1, 4)
(4, 1)
(1, 4)
(1, 15)
CR=RS=A
dcebcmebecamcmaeaeafadaddaadao
(3, 2)
(4, 1)
(2, 12)
(4, 1)
(4, 2)
(0, 12)
(2, 12)
(0, 4)
(0, 4)
(0, 5)
(0, 3)
(0, 3)
(3, 0)
(0, 3)
(0, 14)
2A,AB,0
cbdabldadbplblpdpdpepcpccppcpn
(2, 1)
(3, 0)
(1, 11)
(3, 0)
(3, 1)
(15, 11)
(1, 11)
(15, 3)
(15, 3)
(15, 4)
(15, 2)
(15, 2)
(2, 15)
(15, 2)
(15, 13)
!001������/�
bacpakcpcaokakococodobobboobom
(1, 0)
(2, 15)
(0, 10)
(2, 15)
(2, 0)
(14, 10)
(0, 10)
(14, 2)
(14, 2)
(14, 3)
(14, 1)
(14, 1)
(1, 14)
(14, 1)
(14, 12)
/
/ �
�������
apbopjbobpnjpjnbnbncnanaannanl
(0, 15)
(1, 14)
(15, 9)
(1, 14)
(1, 15)
(13, 9)
(15, 9)
(13, 1)
(13, 1)
(13, 2)
(13, 0)
(13, 0)
(0, 13)
(13, 0)
(13, 11)
�������
��
poanoianaomioimamambmpmppmmpmk
(15, 14)
(0, 13)
(14, 8)
(0, 13)
(0, 14)
(12, 8)
(14, 8)
(12, 0)
(12, 0)
(12, 1)
(12, 15)
(12, 15)
(15, 12)
(12, 15)
(12, 10)
�
�
�������
onpmnhpmpnlhnhlplplaloloollolj
(14, 13)
(15, 12)
(13, 7)
(15, 12)
(15, 13)
(11, 7)
(13, 7)
(11, 15)
(11, 15)
(11, 0)
(11, 14)
(11, 14)
(14, 11)
(11, 14)
(11, 9)
����׿����뾹
nmolmgolomkgmgkokokpknknnkknki
(13, 12)
(14, 11)
(12, 6)
(14, 11)
(14, 12)
(10, 6)
(12, 6)
(10, 14)
(10, 14)
(10, 15)
(10, 13)
(10, 13)
(13, 10)
(10, 13)
(10, 8)
�����Ʈ����ڭ�
mlnklfnknljflfjnjnjojmjmmjjmjh
(12, 11)
(13, 10)
(11, 5)
(13, 10)
(13, 11)
(9, 5)
(11, 5)
(9, 13)
(9, 13)
(9, 14)
(9, 12)
(9, 12)
(12, 9)
(9, 12)
(9, 7)
�ڵ�ە������ɜ�
lkmjkemjmkiekeimiminililliilig
(11, 10)
(12, 9)
(10, 4)
(12, 9)
(12, 10)
(8, 4)
(10, 4)
(8, 12)
(8, 12)
(8, 13)
(8, 11)
(8, 11)
(11, 8)
(8, 11)
(8, 6)
�ɤ�ʄ���������
kjlijdliljhdjdhlhlhmhkhkkhhkhf
(10, 9)
(11, 8)
(9, 3)
(11, 8)
(11, 9)
(7, 3)
(9, 3)
(7, 11)
(7, 11)
(7, 12)
(7, 10)
(7, 10)
(10, 7)
(7, 10)
(7, 5)
�����s�{{|zz�zu
jikhickhkigcicgkgkglgjgjjggjge
(9, 8)
(10, 7)
(8, 2)
(10, 7)
(10, 8)
(6, 2)
(8, 2)
(6, 10)
(6, 10)
(6, 11)
(6, 9)
(6, 9)
(9, 6)
(6, 9)
(6, 4)
�����b�jjkii�id
ihjghbjgjhfbhbfjfjfkfifiiffifd
(8, 7)
(9, 6)
(7, 1)
(9, 6)
(9, 7)
(5, 1)
(7, 1)
(5, 9)
(5, 9)
(5, 10)
(5, 8)
(5, 8)
(8, 5)
(5, 8)
(5, 3)
��q��QqYYZXX�XS
hgifgaifigeagaeieiejehehheehec
(7, 6)
(8, 5)
(6, 0)
(8, 5)
(8, 6)
(4, 0)
(6, 0)
(4, 8)
(4, 8)
(4, 9)
(4, 7)
(4, 7)
(7, 4)
(4, 7)
(4, 2)
v�`��@`HHIGGtGB
gfhefphehfdpfpdhdhdidgdggddgdb
(6, 5)
(7, 4)
(5, 15)
(7, 4)
(7, 5)
(3, 15)
(5, 15)
(3, 7)
(3, 7)
(3, 8)
(3, 6)
(3, 6)
(6, 3)
(3, 6)
(3, 1)
et_tu?_77866c61
fegdeogdgecoeocgcgchcfcffccfca
(5, 4)
(6, 3)
(4, 14)
(6, 3)
(6, 4)
(2, 14)
(4, 14)
(2, 6)
(2, 6)
(2, 7)
(2, 5)
(2, 5)
(5, 2)
(2, 5)
(2, 0)
TcNcd.N&&'%%R% 
edfcdnfcfdbndnbfbfbgbebeebbebp
(4, 3)
(5, 2)
(3, 13)
(5, 2)
(5, 3)
(1, 13)
(3, 13)
(1, 5)
(1, 5)
(1, 6)
(1, 4)
(1, 4)
(4, 1)
(1, 4)
(1, 15)
CR=RS=A
dcebcmebecamcmaeaeafadaddaadao
(3, 2)
(4, 1)
(2, 12)
(4, 1)
(4, 2)
(0, 12)
(2, 12)
(0, 4)
(0, 4)
(0, 5)
(0, 3)
(0, 3)
(3, 0)
(0, 3)
(0, 14)
2A,AB,0
cbdabldadbplblpdpdpepcpccppcpn
(2, 1)
(3, 0)
(1, 11)
(3, 0)
(3, 1)
(15, 11)
(1, 11)
(15, 3)
(15, 3)
(15, 4)
(15, 2)
(15, 2)
(2, 15)
(15, 2)
(15, 13)
!001������/�
bacpakcpcaokakococodobobboobom
(1, 0)
(2, 15)
(0, 10)
(2, 15)
(2, 0)
(14, 10)
(0, 10)
(14, 2)
(14, 2)
(14, 3)
(14, 1)
(14, 1)
(1, 14)
(14, 1)
(14, 12)
/
/ �
�������
apbopjbobpnjpjnbnbncnanaannanl
(0, 15)
(1, 14)
(15, 9)
(1, 14)
(1, 15)
(13, 9)
(15, 9)
(13, 1)
(13, 1)
(13, 2)
(13, 0)
(13, 0)
(0, 13)
(13, 0)
(13, 11)
�������
��
poanoianaomioimamambmpmppmmpmk
(15, 14)
(0, 13)
(14, 8)
(0, 13)
(0, 14)
(12, 8)
(14, 8)
(12, 0)
(12, 0)
(12, 1)
(12, 15)
(12, 15)
(15, 12)
(12, 15)
(12, 10)
�
�
�������
onpmnhpmpnlhnhlplplaloloollolj
(14, 13)
(15, 12)
(13, 7)
(15, 12)
(15, 13)
(11, 7)
(13, 7)
(11, 15)
(11, 15)
(11, 0)
(11, 14)
(11, 14)
(14, 11)
(11, 14)
(11, 9)
����׿����뾹
nmolmgolomkgmgkokokpknknnkknki
(13, 12)
(14, 11)
(12, 6)
(14, 11)
(14, 12)
(10, 6)
(12, 6)
(10, 14)
(10, 14)
(10, 15)
(10, 13)
(10, 13)
(13, 10)
(10, 13)
(10, 8)
�����Ʈ����ڭ�
mlnklfnknljflfjnjnjojmjmmjjmjh
(12, 11)
(13, 10)
(11, 5)
(13, 10)
(13, 11)
(9, 5)
(11, 5)
(9, 13)
(9, 13)
(9, 14)
(9, 12)
(9, 12)
(12, 9)
(9, 12)
(9, 7)
�ڵ�ە������ɜ�