Сущность и основные виды шифрования - Контрольная работа

бесплатно 0
4.5 66
Особенность соблюдения конфиденциальности передаваемой информации. Обладание пользователей определенным аутентичным ключом. Использование симметричного и асимметричного шифрования. Характеристика генерации ключевой пары и расшифрования сообщения.


Аннотация к работе
Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования НИЖЕГОРОДСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ им. Реализация методов симметричного и ассиметричного шифрования (наименование темы проекта или работы)Симметричное шифрование использует один и тот же ключ и для зашифрования, и для расшифрования. 0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1B, 0x36, 0x6C, 0XD8, 0XAB, 0x4D, 0x9A, 0x2F, 0x5E, 0XBC, 0x63, 0XC6, 0x97, 0x35, 0x6A, 0XD4, 0XB3, 0x7D, 0XFA, 0XEF, 0XC5, 0x91, 0x39, ) def text2matrix(text): matrix = [] for i in range(16): byte = (text >> (8 * (15 - i))) & 0XFF if i % 4 == 0: matrix.append([byte]) else: matrix[i / 4].append(byte) return matrix def matrix2text(matrix): text = 0 for i in range(4): for j in range(4): text |= (matrix[i][j] << (120 - 8 * (4 * i j))) return text class AES: def __init__(self, master_key): self.change_key(master_key) def change_key(self, master_key): self.round_keys = text2matrix(master_key) # print self.round_keys for i in range(4, 4 * 11): self.round_keys.append([]) if i % 4 == 0: byte = self.round_keys[i - 4][0] \ # print self.round_keys def encrypt(self, plaintext): self.plain_state = text2matrix(plaintext) self.__add_round_key(self.plain_state, self.round_keys[:4]) for i in range(1, 10): self.__round_encrypt(self.plain_state, self.round_keys[4 * i : 4 * (i 1)]) self.__sub_bytes(self.plain_state) self.__shift_rows(self.plain_state) self.__add_round_key(self.plain_state, self.round_keys[40:]) return matrix2text(self.plain_state) def decrypt(self, ciphertext): self.cipher_state = text2matrix(ciphertext) self.__add_round_key(self.cipher_state, self.round_keys[40:]) self.__inv_shift_rows(self.cipher_state) self.__inv_sub_bytes(self.cipher_state) for i in range(9, 0,-1): self.__round_decrypt(self.cipher_state, self.round_keys[4 * i : 4 * (i 1)]) self.__add_round_key(self.cipher_state, self.round_keys[:4]) return matrix2text(self.cipher_state) def __add_round_key(self, s, k): for i in range(4): for j in range(4): s[i][j] ^= k[i][j] def __round_encrypt(self, state_matrix, key_matrix): self.__sub_bytes(state_matrix) self.__shift_rows(state_matrix) self.__mix_columns(state_matrix) self.__add_round_key(state_matrix, key_matrix) def __round_decrypt(self, state_matrix, key_matrix): self.__add_round_key(state_matrix, key_matrix) self.__inv_mix_columns(state_matrix) self.__inv_shift_rows(state_matrix) self.__inv_sub_bytes(state_matrix) def __sub_bytes(self, s): for i in range(4): for j in range(4): s[i][j] = Sbox[s[i][j]] def __inv_sub_bytes(self, s): for i in range(4): for j in range(4): s[i][j] = INVSBOX[s[i][j]] def __shift_rows(self, s): s[0][1], s[1][1], s[2][1], s[3][1] = s[1][1], s[2][1], s[3][1], s[0][1] s[0][2], s[1][2], s[2][2], s[3][2] = s[2][2], s[3][2], s[0][2], s[1][2] s[0][3], s[1][3], s[2][3], s[3][3] = s[3][3], s[0][3], s[1][3], s[2][3] def __inv_shift_rows(self, s): s[0][1], s[1][1], s[2][1], s[3][1] = s[3][1], s[0][1], s[1][1], s[2][1] s[0][2], s[1][2], s[2][2], s[3][2] = s[2][2], s[3][2], s[0][2], s[1][2] s[0][3], s[1][3], s[2][3], s[3][3] = s[1][3], s[2][3], s[3][3], s[0][3] def __mix_single_column(self, a): # please see Sec 4.1.2 in The Design of Rijndael for i in range(4): u = xtime(xtime(s[i][0] ^ s[i][2])) v = xtime(xtime(s[i][1] ^ s[i][3])) s[i][0] ^= u s[i][1] ^= v s[i][2] ^= u s[i][3] ^= v self.__mix_columns(s) test.py import unittest rom aes import AES class AES_TEST(unittest.TESTCASE): def SETUP(self): master_key = 0x000102030405060708090a0b0c0d0e0f self.AES = AES(master_key) def test_encryption_decription(self): laintext = 0x00112233445566778899aabbccddeeff print "plain text =", hex(plaintext) encrypted = self.AES.encrypt(plaintext) print "encripted text =", hex(encrypted) decrypted = self.AES.decrypt(encrypted) print "decrypted text =", hex(decrypted) if __name__ == "__main__": unittest.
Заказать написание новой работы



Дисциплины научных работ



Хотите, перезвоним вам?