Arka fon
Bir defalık ped , doğru kullanıldığında kırılmasının imkansız olduğu kanıtlanmış bir şifreleme şeklidir.
Şifreleme, bir düz metin (yalnızca AZ harflerinden oluşur) alınarak ve aynı uzunlukta rastgele bir dize (yalnızca harfler) üretilerek gerçekleştirilir. Bu dize anahtar görevi görür. Düz metindeki her karakter daha sonra anahtardaki karşılık gelen karakterle eşleştirilir. Şifreleme metni şu şekilde hesaplanır: Her bir çift için her iki karakter de sayılara dönüştürülür (A = 0, B = 1, ... Z = 25). Bu iki sayıya modulo 26 eklenir. Bu sayı tekrar bir karaktere dönüştürülür.
Şifre çözme tam tersidir. Şifreleme ve anahtardaki karakterler eşleştirilir ve sayılara dönüştürülür. Daha sonra anahtar, şifreli metin modüloğundan 26 çıkarılır ve sonuç, tekrar AZ karakterine dönüştürülür.
Meydan okuma
Zorluk, bir kerelik bir pedi hem şifreleyip hem de şifresini çözebilen mümkün olan en kısa programı yazmaktır.
İlk girdi satırında (STDIN'a) ya "ENCRYPT" ya da "DECRYPT" kelimeleri olacaktır.
Sözcük şifrelenirse, sonraki satır düz metin olacaktır. Programınız, birincisi anahtar ve ikincisi şifre metni olmak üzere iki satır (STDOUT'a) çıkmalıdır.
Kelimenin şifresi çözülürse, programınız iki satır daha alır. İlk satır anahtar, ikinci satır şifre metni olacaktır. Programın şifresi çözülmüş düz metin olacak bir satır çıktı.
Düz metin, şifreli metin ve anahtar her zaman AZ büyük harflerinden oluşmalıdır. Her zaman tek bir satır olacak ve boşluk içermeyeceklerdir.
Anahtar her zaman rastgele olmalıdır. Hiçbir büyük kısmı çalışmalar arasında tekrarlanmamalı ve metinde bulunabilecek kalıplar olmamalıdır.
İki basit örnek:
ENCRYPT
HAPPYBIRTHDAY
>ABKJAQLRJESMG
>HBZYYRTICLVME
DECRYPT
ABKJAQLRJESMG
HBZYYRTICLVME
>HAPPYBIRTHDAY
>
Eğer çıktı olarak o sembolü yazdırmak zorunda kalmamak, çıkış hangi hatlar temsil eder.
/dev/random
, haveged
) verildiğinde, ordsları baytlarla xoring ederek şifreleyin ve anahtarla xoring yaparak şifresini çözün. gist.github.com/5078264 anahtar veya rasgelelik stdin'den okunabilir, mesaj veya şifre metni bir dosya adı argümanı olabilir.
/dev/hwrng
kullanıyorlarsa (neden sözde rastgele kullanmak yerine (teknik olarak onu