AES bloğunun şifresini çözme


10

Bugün hedefiniz AES kullanarak gizli bir mesajın şifresini çözmek . Bir şifre metni ve anahtar verildiğinde, mesajın şifresini çözer ve yazdırırsınız.


  1. Programınız herhangi bir dilde olabilir. Stdin'de giriş ile çalıştırılacak ve stdout'taki çıkışı doğru olup olmadığı kontrol edilecektir.

  2. Stdin'deki ilk girdi satırı, onaltılık olarak kodlanmış 16 bayt anahtar olacaktır. Stdin'deki ikinci girdi satırı, onaltılık olarak kodlanmış 16 baytlık şifreli metin olacaktır.

  3. Verilen anahtarla AES-128 kullanılarak şifre metninin şifresi çözüldükten sonra programın çıkışı 16 baytlık bir mesaj olmalıdır. ASCII sekizli olarak yorumlanan sonucu çıkarmalısınız. Şifre çözüldükten sonra herhangi bir sonucun geçerli ASCII olduğunu varsayabilirsiniz.

  4. AES'yi uygulayan herhangi bir kütüphane / yerleşik özellik kullanamazsınız. Bu özellikleri onaltılık / ikili / ASCII kodlamaları arasında dönüştürme yapmak için kullanabilirsiniz.

Bayt cinsinden en kısa kod kazanır.

Örnek giriş ve çıkış:

bd8ab53f10b3d38576a1b9a15cf03834
02c0ee126cae50ba938a8b16f0e04d23

Yarın saldırı.

Ve başka:

f4af804ad097ba832906db0deb7569e3
38794338dafcb09d6b32b04357f64d4d

Tebrikler.


5
... AES nedir?
Alex


Yanıtlar:


4

Python, 661 karakter

R=range
I=lambda x:[int(x[2*i:2*i+2],16)for i in R(16)]
k=I(raw_input())
c=I(raw_input())
P=[]
x=1
for i in R(512):P+=[x];x^=x*2^(x>>7)*0x11b
S=[255&(99^j^(j>>4)^(j>>5)^(j>>6)^(j>>7))for i in R(256)for j in[(P[255-P.index(i)]if i else 0)*257]]
for r in R(10):
 for i in R(4):k+=[k[-16]^S[k[-3-(i>2)*4]]]
 k[-4]^=[1,2,4,8,16,32,64,128,27,54][r]
 for i in R(12):k+=[k[-16]^k[-4]]
for r in R(11):
 c=[x^y for x,y in zip(k[160-16*r:],c)]
 if r>9:break
 for i in[0,4,8,12]*(r>0):c[i:i+4]=[x^y^z^w for j in R(4)for x,y,z,w in[[P[a+P.index(v)]if v else 0 for a,v in zip((2*[104,238,199,223])[3-j:],c[i:i+4])]]]
 c=(c*13)[::13];c=map(S.index,c)
print''.join(map(chr,c))

kanahtar, cşifreleme metnidir. Ben P'yi, 3'ün gücünü sahada, sonra Sda sbox'ı inşa ediyorum. Sonra kanahtar zamanlama ile genişletilir. Sonunda AES şifresini çözüyoruz. Mixcolumns zor fazdır, diğer tüm fazlar oldukça basittir.


Belki de Pyth'de bir tane yapmalısın, aksi takdirde birisinin sizi süpürüp çevireceğini, sizi
döveceğini garanti

Hızlı bir test olarak başka bir test çantası oluşturdum, ancak çözümünüz başarısız oluyor. Hata ayıklayabilmeniz için soruya ikinci test çantasını ekledim.
orlp

@orip: düzeltildi. Sıfırla çarpmada bir hataydı.
Keith Randall
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.