Yaseen724

ciphertext ioc

Mar 6th, 2021
824
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. def calculate_index_of_coincidence(values, alphabet):
  2.     frequency_table = {byte:values.count(byte) for byte in values}
  3.     assert all(key in alphabet for key in frequency_table)
  4.  
  5.     N = len(values)
  6.     c = len(alphabet)
  7.  
  8.     return sum(v*(v-1) for v in frequency_table.values())/(N*(N-1)/c)
  9.  
  10. C1=  '1e f1 52 43 79 56 5a 7e 60 33 ad 54 ef 38 1b 33 bc 7b 3d 40 9d b1 64 39 63 8c bc de 1b 19 d1 dc d0 38 3a ce 7b 66 df a5 00 f0 18 02 73 b1 7a f7 ce 3b a2 7d a6 af 46 83 75 38 ea aa 24 d5 f1 46 80 c8 b3 28 6d d1 02 7a 37 5b ce 3a d2 98 6c 1f 71 c4 e5 8d 60 7d db f3 90 f2 ef 68 9a 6b ca 80 36 1a 39 7e 47 52 49 e6 5a 2f 57 d5 a1 07 60 bb ae 8e 90 75 2f 4a 15 8a b2 3e 0f c9 e4 d2 f2 21 2c 18 7d 18 23 6a a2 47 e2 9a 54 30 50 78 d5 fb 9c f1 5c 80 28 7c 84 9a 68 8c c8 50 64 2a 83 85 76 3a 54 11 12 f7 8c e6 c7 f1 e3 2b 54 9c 3c 74 d2 bc ba 7c 25 4a a7 92 f5 30 4a 56 69 79 ed 2f f9 31 14 f6 d8 1d 4e 65 8a 6e 1e c6 4b d3 ca 12 64 7b c9 4e fe fb fc ab f0 df 0c 54 22 9d 72 2b b9 41 0f 30 f2 ab 6d d0 ec 3f e9 81 e7 80 8f e4 6e b8 24 89 2f f7 57 8a 02 9e df d2 18 df ec 14 7e ef e1 2c 77 e0 d9 54 e3 91 d1 c7 15 e5 3e 36 3e 2c 0c 20 c8 c0 59 b0 c3 14 d6 a1 b4 a6 2c cb f1 a7 c0 5b bf 9b a4 af c1 7f 19 31 51 f0 e1 e7 0e 8e 7f 40 d2 cb ca 8a d4 9a e0 3b 14 4f 19 2e e9 5e 47 1f e0 52 9e f5 2c 37 c7 3b 80 de 55 5b 97 2b f1 d2 cc cc 3c ec dc ba d8 fd af ed 41 64 e4 2e e6 0a 97 42 54 90 de ec 2f e0 64 e0 e7 49 a9 9c 30 2a db bb 0a 47 bc bc b7 8a ee 96 c0 22 da d3 be c5 ea 6c ea 88 d8 dd dd 2a 31 c6 46 0d'
  11. C2=  '40 da 78 a4 9f 0b f0 58 42 77 11 7c f4 80 66 71 85 4a b2 5c 46 5b 8f 25 dc b8 1c 41 78 95 15 a9 7f 37 14 d1 f2 1c 40 b8 46 22 bb f9 20 87 24 31 1c dd 78 32 41 68 c4 dd 56 ef 55 bb 10 c6 c8 31 d5 1b c6 fd 31 54 14 84 fd 6b c9 9e 00 b0 70 8e 2f 39 7c 8f eb 47 83 4f ed cc 82 49 1e 9b 6f 16 01 9d a7 43 5c 6e 90 ac 83 47 59 b9 d7 1d f1 90 5f c6 99 ff e9 d9 0f 2a 3e 5a e7 25 17 39 0f 52 b3 01 6a c2 ee a2 d5 3f 43 34 c3 10 b9 53 e6 dc dc 23 25 27 6a 45 35 50 7d 4a 4f df eb e5 26 7e e8 52 21 41 73 8a 23 a7 23 b5 a0 35 3a 64 ad fa 2d 3a 50 45 21 8c d1 db 20 a9 b2 99 99 30 64 88 c6 10 03 3f 69 1b 78 aa 68 37 30 c5 95 31 dc ae 3c 6f c6 01 c2 07 54 64 19 78 40 c3 d0 5f 37 35 3f 9d 0f 19 9d 9f 98 be 73 08 fe 57 34 e8 b5 f5 18 e5 fc f6 e7 42 e2 eb c3 c3 b9 3b 56 a7 82 09 d4 5e 3f b9 f3 ed d1 01 dc 33 eb ad c1 0a 90 04 6e 5b cc 9b 53 ff a6 8f 77 54 6d b3 48 2b e4 f8 6d 62 f1 f4 37 4d c8 5d db a3 a9 d1 08 32 c2 57 3a 37 af 9f 66 b2 8b 6c ba 2f dd bd 83 3b dd 23 9b dd a7 26 d4 eb f3 fa eb 5b dd cd f1 07 ba 85 17 58 2b 5d fc a8 e0 c6 b0 aa b4 86 22 16 2f 69 34 f1 b6 1e 26 13 2f 05 99 e1 bb ca de 53 64 38 2b 5b c8 85 6b a3 41 fb ad f7 b1 94 29 cd 4b fe 11 a9 35 33 59 8d f5 73 af 1b be 8a 4a 76 17 8f'
  12. C3=  '68 f2 2e 48 c4 b5 77 53 a1 a5 a2 b5 c1 6c ee 20 af 6d 06 bd 49 22 62 55 f7 36 7c d1 1a 8a 37 fd 41 82 07 a9 5b 94 9b a7 81 00 27 13 58 a0 db 17 ff 36 85 e4 19 6f df 27 d9 5b 77 42 fe 8f 63 fe a0 d4 b8 0a 43 91 3c c8 44 fe 1b ae 4a a3 72 7a ab 34 9e b5 c2 09 56 9d 70 a8 c2 f4 8b 1f c5 59 34 07 45 45 b2 d7 30 e2 ba 01 75 93 1c ea 57 fb d0 bb 55 a2 c9 d0 7b 30 c0 cc 2b c9 bf a7 0b 1e 7e fa e8 96 76 16 2d ab 2e b1 c4 e9 8f 07 8e 9d ff 7d 77 ad f8 3b 98 92 8d f4 ae 07 42 a1 67 d9 0c 64 ba 19 31 47 e1 d6 f5 ae d0 d8 f0 c3 a1 24 e2 5e 08 dd 9b a2 54 6f 42 49 a5 b3 a2 e6 36 7c 31 24 36 3f 83 d1 3e cb c2 25 b7 81 39 bb 79 0b 24 9c ac 69 02 3c 48 ef c3 ab 90 06 26 44 2b 9f de fd c4 19 8f 50 4b f1 fb af 47 7e 8f 00 4d 02 55 69 48 dd e8 12 2d 7a d4 f6 2e 86 71 cc 83 75 74 60 63 de 55 80 10 80 39 31 4f 4d 6c 91 c2 fa bd 2e e5 fd 5b e5 c7 8a d4 c6 37 1b e6 cd 43 50 09 3f f7 e5 4d 93 dc 67 86 59 e4 f9 fd bd 90 61 07 62 91 aa 5c 0b 86 7b c3 e4 61 88 b6 9e 8d 38 61 25 34 bb c0 ac c6 6a 19 ae 63 ff 3e c4 c5 1b 74 9f a4 62 7b 85 4e 48 56 a9 9d fa 05 88 83 09 84 0b 65 f6 f2 18 0f 9b cc a5 dc e9 c3 b2 a5 98 e3 fa d5 a0 49 e3 dc f2 8c 0e a1 5a 99 18 79 1b 97 dc 43 3f 70 7d 70 9f 48 44 da 0d ca f6 20 39'
  13. C4=  'd3 9f 95 27 60 1e ff a7 ca 10 93 ce e7 f0 89 71 e1 4a 06 7b 46 f8 5d 23 dc 61 d5 0e f7 5c 95 1e 2e 51 ea 33 66 ea 69 8d cc d0 c2 0c 20 2b f9 f6 b0 22 78 ca 82 c7 1e 9f 9e 95 19 f9 c9 7d 59 2c e1 82 c7 34 e1 b7 88 84 07 35 a7 13 54 8d 07 97 27 39 b6 8f 2a 0f 50 20 be d6 08 04 1e 99 cb 7a a3 6b 1c 6f 5f 6e 21 93 74 a1 a9 18 e9 d0 3d 2d 0a c6 b5 0b 80 9d 6f 4a a3 ee b2 a0 c0 02 3e 64 7f 63 49 c2 6f 60 c6 64 43 79 d2 b3 d1 eb b9 53 ca 03 87 28 15 ac 96 d6 0e cf 92 86 c3 1b 26 3a 38 9a 81 7d 50 69 23 84 5e 92 c6 cb e3 0a 46 99 d6 e3 ca 6f 5d 57 e9 54 41 f8 00 c2 13 a9 90 0a 5a 92 8b 73 d3 d9 7c aa 2e d9 48 91 b2 57 86 95 2d 6f 2f 34 08 b7 df 64 c9 42 69 7d 08 21 c6 5f d6 35 a7 d9 6e 4e 7d 16 76 4c 79 57 30 0f 0e f5 49 e5 01 c5 88 5f 59 c1 d9 40 6f 29 4a 31 f1 1b d4 4e 67 ff 93 ed 7d f2 9a 8d 86 46 ab a3 bc 80 76 f9 ea 9b 06 95 1a de a3 97 10 da f7 16 8f f8 bc e2 66 bb 11 c5 24 70 bb d1 4a f1 58 a9 68 31 37 22 e6 d4 e5 ae e3 97 02 e5 40 bd 57 4d b5 03 b4 33 1a bb 29 eb 22 c6 3c f0 41 a1 f1 84 31 08 17 68 e6 cd fc a6 e9 1e c7 0c a5 69 d2 eb c2 86 2d 07 b6 eb 9c bf 4e 16 f5 46 75 01 cb 04 71 3d ee ff 78 fc 14 0a a3 51 9e ef 2f d1 6c 7f 21 c0 30 86 31 13 67 8d f4 1f 50 4e 46 69 34 76 a6 71'
  14.  
  15. ciphertexts = [C1, C2, C3, C4]
  16. labels = ["C1", "C2", "C3", "C4"]
  17.  
  18. # 1) generate the alphabet (or an approximation of it I guess... encoding is not UTF-8 to my knowledge so I have no idea what the size of the alphabet actually is)
  19. # start it with every character already in there, then add in the xor'd characters in case that introduces new ones
  20. alphabet = set(byte for c in ciphertexts for byte in c.split())
  21.  
  22. print('length of alphabet before adding in xor\'d pairs', len(alphabet))
  23.  
  24. for i in range(len(ciphertexts)-1):
  25.     for j in range(i, len(ciphertexts)):
  26.         for b1, b2 in zip(ciphertexts[i].split(), ciphertexts[j].split()):
  27.             i1, i2 = int(b1, 16), int(b2, 16)
  28.             xor = i1 ^ i2
  29.             alphabet.add(format(xor, 'x'))
  30.  
  31. print('length of alphabet afterward', len(alphabet))
  32.  
  33. # 2) calculate the index of coincidence for each pair-wise xor
  34. for i in range(len(ciphertexts)-1):
  35.     for j in range(i+1, len(ciphertexts)):
  36.         # split the strings by spaces
  37.         # then for each "byte":
  38.         #   parse as int
  39.         #   xor one with the other
  40.         #   cast back to string
  41.         #   calculate IoC
  42.         i_xor_j = []
  43.         for b1, b2 in zip(ciphertexts[i].split(), ciphertexts[j].split()):
  44.             i1, i2 = int(b1, 16), int(b2, 16)
  45.             xor = i1 ^ i2
  46.             i_xor_j.append(format(xor, 'x'))
  47.        
  48.         print(f'({labels[i]}, {labels[j]}) index of coincidence: {calculate_index_of_coincidence(i_xor_j, alphabet)}')
RAW Paste Data

Adblocker detected! Please consider disabling it...

We've detected AdBlock Plus or some other adblocking software preventing Pastebin.com from fully loading.

We don't have any obnoxious sound, or popup ads, we actively block these annoying types of ads!

Please add Pastebin.com to your ad blocker whitelist or disable your adblocking software.

×