Advertisement
Guest User

Untitled

a guest
Mar 23rd, 2019
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.92 KB | None | 0 0
  1.  
  2.  
  3.  
  4. import os
  5. import sys
  6. import rsa
  7. from Crypto.Cipher import AES
  8.  
  9.  
  10. def encryption(message_block, key, IV):
  11. ############################### encryption message from transceiver ###################################
  12. message_block_size= len(message_block) #size Byte of message_block
  13. message="" #blok 16Byte
  14. array_ciphertext = []
  15. x = -1 # pomocna pro urceni velkostio bloku, protoze umi zasifrovat len 16Byte naraz
  16.  
  17. for i in range(0, len(message_block)): # cyklus od 0 po velkost spravy
  18. message +=message_block[i] # pripocitam aktualny ynak z spravy
  19. x += 1
  20. if x == 13: # urci nam velkost bloku na 14Byte lebo pridame +2Byte zahlavi
  21. x=-1 # vynuluje promenu
  22. message+="02" #zahlavi
  23. obj = AES.new(key, AES.MODE_CBC, IV) #vytvori tzv. sifrer AES
  24. ciphertext = obj.encrypt(message) # zasifruje message
  25. array_ciphertext.append(ciphertext) # prida tento blok do pola
  26. IV = ciphertext # IV sa stane predchadzajuca zasifrovana sprava princip CBC modu
  27. message="" # vynuluje message
  28. if i == (len(message_block)-1): # ked je posledny znak
  29. residue_value = ((i+1) % 14) # pocet znaku v poslednem bloku, aby sme vedeli dat vypln
  30. cycle = 16 - residue_value # pocet Bytu vyplne neskur pouzijeme jak pocet 0
  31. value_cycle=cycle # pocet Bytu vyplne
  32. if residue_value !=0: # podminka ze by posledny blok byl presne 14
  33. if cycle < 10: # ked sa bude doplnat menej jak 10 bytu tak aby sme pridali max 8x0 a na max konec 9 jedno misto na vyjadreni kolko ich je
  34. cycle -=1 # pocet 0
  35. else: # ked doplname 10 az 15 tak aby bylo max 13x 0 a max15 na konci dve mista na vyjadreni kolko ich je
  36. cycle -= 2 #pocet 0
  37.  
  38. for i in range(0,cycle): # cyklus na pridani 0
  39. message+="0" # pridani 0
  40. message+=str(value_cycle) # pridani kolko je vyplne
  41. obj = AES.new(key, AES.MODE_CBC, IV)
  42. ciphertext = obj.encrypt(message)
  43. array_ciphertext.append(ciphertext)
  44. IV = ciphertext
  45.  
  46. return array_ciphertext
  47.  
  48.  
  49.  
  50.  
  51.  
  52.  
  53.  
  54.  
  55.  
  56. def decryption(array_ciphertext, key, IV):
  57. array_plaintext=[]
  58.  
  59. plaintext=[]
  60.  
  61. for i in range(0, len(array_ciphertext)):
  62. message=array_ciphertext[i]
  63. obj = AES.new(key, AES.MODE_CBC, IV)
  64. plaintext_with_payload=obj.decrypt(message)
  65. IV = message
  66. value=plaintext_with_payload[14]*10+plaintext_with_payload[15]
  67. chars_of_message=16-value
  68. for j in range(0,chars_of_message):
  69. plaintext+=plaintext_with_payload[j]
  70. array_plaintext.append(plaintext)
  71.  
  72.  
  73. #value=array_plaintext[len(array_ciphertext)-1]
  74. return array_plaintext
  75.  
  76. def main():
  77.  
  78. ciphertext = encryption("12345678901234567890123456789", "This is a key123", 'This is an IV456')
  79. print(ciphertext[0])
  80. print(len(ciphertext[0]))
  81.  
  82. message = decryption(ciphertext, "This is a key123", 'This is an IV456')
  83. print(message[0])
  84. #message_block=ciphertext
  85. # message=""
  86. # message_block = "ciphertextkkjnjbhvgvgvnjnjhb"
  87. # for i in range(0, len(message_block)):
  88. # message +=message_block[i]
  89. #
  90. # print(message)
  91.  
  92.  
  93.  
  94.  
  95.  
  96. if __name__ == '__main__':
  97. main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement