Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import os
- import sys
- import rsa
- from Crypto.Cipher import AES
- def encryption(message_block, key, IV):
- ############################### encryption message from transceiver ###################################
- message_block_size= len(message_block) #size Byte of message_block
- message="" #blok 16Byte
- array_ciphertext = []
- x = -1 # pomocna pro urceni velkostio bloku, protoze umi zasifrovat len 16Byte naraz
- for i in range(0, len(message_block)): # cyklus od 0 po velkost spravy
- message +=message_block[i] # pripocitam aktualny ynak z spravy
- x += 1
- if x == 13: # urci nam velkost bloku na 14Byte lebo pridame +2Byte zahlavi
- x=-1 # vynuluje promenu
- message+="02" #zahlavi
- obj = AES.new(key, AES.MODE_CBC, IV) #vytvori tzv. sifrer AES
- ciphertext = obj.encrypt(message) # zasifruje message
- array_ciphertext.append(ciphertext) # prida tento blok do pola
- IV = ciphertext # IV sa stane predchadzajuca zasifrovana sprava princip CBC modu
- message="" # vynuluje message
- if i == (len(message_block)-1): # ked je posledny znak
- residue_value = ((i+1) % 14) # pocet znaku v poslednem bloku, aby sme vedeli dat vypln
- cycle = 16 - residue_value # pocet Bytu vyplne neskur pouzijeme jak pocet 0
- value_cycle=cycle # pocet Bytu vyplne
- if residue_value !=0: # podminka ze by posledny blok byl presne 14
- 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
- cycle -=1 # pocet 0
- else: # ked doplname 10 az 15 tak aby bylo max 13x 0 a max15 na konci dve mista na vyjadreni kolko ich je
- cycle -= 2 #pocet 0
- for i in range(0,cycle): # cyklus na pridani 0
- message+="0" # pridani 0
- message+=str(value_cycle) # pridani kolko je vyplne
- obj = AES.new(key, AES.MODE_CBC, IV)
- ciphertext = obj.encrypt(message)
- array_ciphertext.append(ciphertext)
- IV = ciphertext
- return array_ciphertext
- def decryption(array_ciphertext, key, IV):
- array_plaintext=[]
- plaintext=[]
- for i in range(0, len(array_ciphertext)):
- message=array_ciphertext[i]
- obj = AES.new(key, AES.MODE_CBC, IV)
- plaintext_with_payload=obj.decrypt(message)
- IV = message
- value=plaintext_with_payload[14]*10+plaintext_with_payload[15]
- chars_of_message=16-value
- for j in range(0,chars_of_message):
- plaintext+=plaintext_with_payload[j]
- array_plaintext.append(plaintext)
- #value=array_plaintext[len(array_ciphertext)-1]
- return array_plaintext
- def main():
- ciphertext = encryption("12345678901234567890123456789", "This is a key123", 'This is an IV456')
- print(ciphertext[0])
- print(len(ciphertext[0]))
- message = decryption(ciphertext, "This is a key123", 'This is an IV456')
- print(message[0])
- #message_block=ciphertext
- # message=""
- # message_block = "ciphertextkkjnjbhvgvgvnjnjhb"
- # for i in range(0, len(message_block)):
- # message +=message_block[i]
- #
- # print(message)
- if __name__ == '__main__':
- main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement