Dzisiaj Twoim celem jest odszyfrowanie tajnej wiadomości za pomocą AES . Biorąc pod uwagę zaszyfrowany tekst i klucz, odszyfrujesz i wydrukujesz wiadomość.
Twój program może być w dowolnym języku. Zostanie uruchomiony z wejściem na stdin, a jego wyjście na stdout zostanie sprawdzone pod kątem poprawności.
Pierwszym wierszem wejścia na stdin będzie 16-bajtowy klucz zakodowany w systemie szesnastkowym. Drugim wierszem wejścia na stdin będzie 16-bajtowy tekst zaszyfrowany, zapisany w systemie szesnastkowym.
Wyjście programu musi być 16-bajtowym komunikatem po odszyfrowaniu tekstu zaszyfrowanego za pomocą AES-128 z danym kluczem. Wynik należy interpretować jako oktety ASCII. Możesz założyć, że każdy wynik jest prawidłowy ASCII po odszyfrowaniu.
Nie możesz używać żadnych bibliotek / wbudowanych funkcji, które implementują AES. Możesz użyć takich funkcji do konwersji między kodowaniem szesnastkowym / binarnym / ASCII.
Najkrótszy kod w bajtach wygrywa.
Przykładowe dane wejściowe i wyjściowe:
bd8ab53f10b3d38576a1b9a15cf03834
02c0ee126cae50ba938a8b16f0e04d23
Zaatakuj jutro.
I kolejny:
f4af804ad097ba832906db0deb7569e3
38794338dafcb09d6b32b04357f64d4d
Gratulacje.
źródło
Odpowiedzi:
Python, 661 znaków
k
jest kluczem,c
jest zaszyfrowanym tekstem.S
Buduję P, potęgi 3 w terenie, a następnie sbox. Następniek
zostaje przedłużony o kluczowy harmonogram. Wreszcie dokonujemy deszyfrowania AES. Mixkolumny to faza trudna, wszystkie pozostałe fazy są dość proste.źródło