0% found this document useful (0 votes)
6 views3 pages

Pratikum 8

Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
6 views3 pages

Pratikum 8

Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 3

PRATIKUM PEMBENTUKAN KUNCI DENGAN AES

Kode program

S_BOX = [
[0x63, 0x7C, 0x77, 0x7B, 0xF2, 0x6B, 0x6F, 0xC5, 0x30, 0x01, 0x67, 0x2B, 0xFE,
0xD7, 0xAB, 0x76],
[0xCA, 0x82, 0xC9, 0x7D, 0xFA, 0x59, 0x47, 0xF0, 0xAD, 0xD4, 0xA2, 0xAF, 0x9C,
0xA4, 0x72, 0xC0],
[0xB7, 0xFD, 0x93, 0x26, 0x36, 0x3F, 0xF7, 0xCC, 0x34, 0xA5, 0xE5, 0xF1, 0x71,
0xD8, 0x31, 0x15],
[0x04, 0xC7, 0x23, 0xC3, 0x18, 0x96, 0x05, 0x9A, 0x07, 0x12, 0x80, 0xE2, 0xEB,
0x27, 0xB2, 0x75],
[0x09, 0x83, 0x2C, 0x1A, 0x1B, 0x6E, 0x5A, 0xA0, 0x52, 0x3B, 0xD6, 0xB3, 0x29,
0xE3, 0x2F, 0x84],
[0x53, 0xD1, 0x00, 0xED, 0x20, 0xFC, 0xB1, 0x5B, 0x6A, 0xCB, 0xBE, 0x39, 0x4A,
0x4C, 0x58, 0xCF],
[0xD0, 0xEF, 0xAA, 0xFB, 0x43, 0x4D, 0x33, 0x85, 0x45, 0xF9, 0x02, 0x7F, 0x50,
0x3C, 0x9F, 0xA8],
[0x51, 0xA3, 0x40, 0x8F, 0x92, 0x9D, 0x38, 0xF5, 0xBC, 0xB6, 0xDA, 0x21, 0x10,
0xFF, 0xF3, 0xD2],
[0xCD, 0x0C, 0x13, 0xEC, 0x5F, 0x97, 0x44, 0x17, 0xC4, 0xA7, 0x7E, 0x3D, 0x64,
0x5D, 0x19, 0x73],
[0x60, 0x81, 0x4F, 0xDC, 0x22, 0x2A, 0x90, 0x88, 0x46, 0xEE, 0xB8, 0x14, 0xDE,
0x5E, 0x0B, 0xDB],
[0xE0, 0x32, 0x3A, 0x0A, 0x49, 0x06, 0x24, 0x5C, 0xC2, 0xD3, 0xAC, 0x62, 0x91,
0x95, 0xE4, 0x79],
[0xE7, 0xC8, 0x37, 0x6D, 0x8D, 0xD5, 0x4E, 0xA9, 0x6C, 0x56, 0xF4, 0xEA, 0x65,
0x7A, 0xAE, 0x08],
[0xBA, 0x78, 0x25, 0x2E, 0x1C, 0xA6, 0xB4, 0xC6, 0xE8, 0xDD, 0x74, 0x1F, 0x4B,
0xBD, 0x8B, 0x8A],
[0x70, 0x3E, 0xB5, 0x66, 0x48, 0x03, 0xF6, 0x0E, 0x61, 0x35, 0x57, 0xB9, 0x86,
0xC1, 0x1D, 0x9E],
[0xE1, 0xF8, 0x98, 0x11, 0x69, 0xD9, 0x8E, 0x94, 0x9B, 0x1E, 0x87, 0xE9, 0xCE,
0x55, 0x28, 0xDF],
[0x8C, 0xA1, 0x89, 0x0D, 0xBF, 0xE6, 0x42, 0x68, 0x41, 0x99, 0x2D, 0x0F, 0xB0,
0x54, 0xBB, 0x16],
]

R_CON = [0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1B, 0x36]

def sub_word(word):
return [S_BOX[byte >> 4][byte & 0x0F] for byte in word]

def rot_word(word):
return word[1:] + word[:1]

def text_to_hex(text):
return [ord(char) for char in text]

def aes_key_expansion(key):
round_keys = [key]
for i in range(1, 11):
prev_key = round_keys[-1]
last_col = [prev_key[row][3] for row in range(4)]
temp_col = sub_word(rot_word(last_col))
temp_col[0] ^= R_CON[i - 1]
new_key = []
for row in range(4):
new_byte = prev_key[row][0] ^ temp_col[row]
temp_col[row] = new_byte
new_key.append([new_byte])
for col in range(1, 4):
for row in range(4):
new_byte = prev_key[row][col] ^ temp_col[row]
temp_col[row] = new_byte
new_key[row].append(new_byte)
round_keys.append(new_key)
return round_keys

print("\nEnter text (16 characters) or 16-byte hex key (32 hex digits):")
input_data = input().strip()
if len(input_data) == 16:
key_bytes = text_to_hex(input_data)
elif len(input_data) == 32 and all(char in "0123456789ABCDEFabcdef" for char in
input_data):
key_bytes = [int(input_data[i:i + 2], 16) for i in range(0, len(input_data),
2)]
else:
print("Invalid input!")
exit()

initial_key = [[key_bytes[i + j * 4] for i in range(4)] for j in range(4)]

expanded_keys = aes_key_expansion(initial_key)

for round_num, key in enumerate(expanded_keys):


print(f"Round {round_num} Key:")
for row in key:
print(" ".join(f"{byte:02X}" for byte in row))
print()

Program Kedua dengan proses yang lengkap


import pandas as pd

S_BOX = [
[0x63, 0x7C, 0x77, 0x7B, 0xF2, 0x6B, 0x6F, 0xC5, 0x30, 0x01, 0x67, 0x2B, 0xFE,
0xD7, 0xAB, 0x76],
[0xCA, 0x82, 0xC9, 0x7D, 0xFA, 0x59, 0x47, 0xF0, 0xAD, 0xD4, 0xA2, 0xAF, 0x9C,
0xA4, 0x72, 0xC0],
[0xB7, 0xFD, 0x93, 0x26, 0x36, 0x3F, 0xF7, 0xCC, 0x34, 0xA5, 0xE5, 0xF1, 0x71,
0xD8, 0x31, 0x15],
[0x04, 0xC7, 0x23, 0xC3, 0x18, 0x96, 0x05, 0x9A, 0x07, 0x12, 0x80, 0xE2, 0xEB,
0x27, 0xB2, 0x75],
[0x09, 0x83, 0x2C, 0x1A, 0x1B, 0x6E, 0x5A, 0xA0, 0x52, 0x3B, 0xD6, 0xB3, 0x29,
0xE3, 0x2F, 0x84],
[0x53, 0xD1, 0x00, 0xED, 0x20, 0xFC, 0xB1, 0x5B, 0x6A, 0xCB, 0xBE, 0x39, 0x4A,
0x4C, 0x58, 0xCF],
[0xD0, 0xEF, 0xAA, 0xFB, 0x43, 0x4D, 0x33, 0x85, 0x45, 0xF9, 0x02, 0x7F, 0x50,
0x3C, 0x9F, 0xA8],
[0x51, 0xA3, 0x40, 0x8F, 0x92, 0x9D, 0x38, 0xF5, 0xBC, 0xB6, 0xDA, 0x21, 0x10,
0xFF, 0xF3, 0xD2],
[0xCD, 0x0C, 0x13, 0xEC, 0x5F, 0x97, 0x44, 0x17, 0xC4, 0xA7, 0x7E, 0x3D, 0x64,
0x5D, 0x19, 0x73],
[0x60, 0x81, 0x4F, 0xDC, 0x22, 0x2A, 0x90, 0x88, 0x46, 0xEE, 0xB8, 0x14, 0xDE,
0x5E, 0x0B, 0xDB],
[0xE0, 0x32, 0x3A, 0x0A, 0x49, 0x06, 0x24, 0x5C, 0xC2, 0xD3, 0xAC, 0x62, 0x91,
0x95, 0xE4, 0x79],
[0xE7, 0xC8, 0x37, 0x6D, 0x8D, 0xD5, 0x4E, 0xA9, 0x6C, 0x56, 0xF4, 0xEA, 0x65,
0x7A, 0xAE, 0x08],
[0xBA, 0x78, 0x25, 0x2E, 0x1C, 0xA6, 0xB4, 0xC6, 0xE8, 0xDD, 0x74, 0x1F, 0x4B,
0xBD, 0x8B, 0x8A],
[0x70, 0x3E, 0xB5, 0x66, 0x48, 0x03, 0xF6, 0x0E, 0x61, 0x35, 0x57, 0xB9, 0x86,
0xC1, 0x1D, 0x9E],
[0xE1, 0xF8, 0x98, 0x11, 0x69, 0xD9, 0x8E, 0x94, 0x9B, 0x1E, 0x87, 0xE9, 0xCE,
0x55, 0x28, 0xDF],
[0x8C, 0xA1, 0x89, 0x0D, 0xBF, 0xE6, 0x42, 0x68, 0x41, 0x99, 0x2D, 0x0F, 0xB0,
0x54, 0xBB, 0x16],
]

# Define R-Con
R_CON = [0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1B, 0x36]

# Helper functions
def sub_word(word):
return [S_BOX[byte >> 4][byte & 0x0F] for byte in word]

def rot_word(word):
return word[1:] + word[:1]

def text_to_hex(text):
return [ord(char) for char in text]

# AES Key Expansion


def aes_key_expansion(key):
round_keys = [key]
for i in range(1, 11):
prev_key = round_keys[-1]
last_col = [prev_key[row][3] for row in range(4)]
temp_col = sub_word(rot_word(last_col))
temp_col[0] ^= R_CON[i - 1]
new_key = []
for row in range(4):
new_byte = prev_key[row][0] ^ temp_col[row]
temp_col[row] = new_byte
new_key.append([new_byte])
for col in range(1, 4):
for row in range(4):
new_byte = prev_key[row][col] ^ temp_col[row]
temp_col[row] = new_byte
new_key[row].append(new_byte)
round_keys.append(new_key)
return round_keys

print("\nEnter text (16 characters) or 16-byte hex key (32 hex digits):")
input_data = input().strip()

if len(input_data) == 16:
key_bytes = text_to_hex(input_data)
print("\nText to Hex Conversion:")
for i, char in enumerate(input_data):
print(f"{char} -> {ord(char):02X}")
elif len(input_data) == 32 and all(char in "0123456789ABCDEFabcdef" for char in
input_data):
key_bytes = [int(input_data[i:i + 2], 16) for i in range(0, len(input_data),
2)]
else:
print("Invalid input!")
exit()

initial_key = [[key_bytes[i + j * 4] for i in range(4)] for j in range(4)]

print("\nS-Box:")
s_box_df = pd.DataFrame(S_BOX, index=[f"{i:X}" for i in range(16)],
columns=[f"{i:X}" for i in range(16)])
print(s_box_df)

print("\nR-Con:")
for i, val in enumerate(R_CON):
print(f"Round {i + 1}: {val:02X}")

expanded_keys = aes_key_expansion(initial_key)

for round_num, key in enumerate(expanded_keys):


print(f"\nRound {round_num} Key:")
for row in key:
print(" ".join(f"{byte:02X}" for byte in row))

You might also like