Vijiner şifre temelde bir anahtar göre, birkaç Sezar şifrelerin birini uygulanan basit bir polyalphabetic şifre idi. Temel olarak, tuştaki harfler hangi alfabenin kaydırılacağını gösterir. Bu amaçla Vigenère Meydanı adı verilen basit bir araç vardı :
Burada her satır, anahtarın karşılık gelen harfiyle başlayan ayrı bir alfabedir. Sütunlar şifreli harfi belirlemek için kullanılır. Şifre çözme, aynı şekilde çalışır, ancak tam tersi.
Dize şifrelemek istediğimizi varsayalım CODEGOLF
. Ayrıca bir anahtara ihtiyacımız var. Bu durumda anahtar olacaktır FOOBAR
. Anahtar, düz metinden daha kısa olduğunda, tekrarlayarak genişletiriz, bu nedenle kullandığımız gerçek anahtardır FOOBARFO
. Şimdi F
alfabenin yerini bulmak için anahtarın ilk harfini araştırıyoruz . Belki şaşırtıcı bir şekilde ile başlar F
. Şimdi sütunu düz metnin ilk harfiyle bulduk ve ortaya çıkan harf H
. İkinci harf O
için anahtar harf ve düz metin harf olarak karşımıza çıkmaktadır C
. Bu şekilde devam ederek nihayet elde ederiz HCRFGFQT
.
Görev
Şimdi göreviniz bir anahtar verilen mesajları deşifre etmektir. Bununla birlikte, 16. yüzyıldan beri genişlediğimiz ve bilgisayarlara sahip olduğumuzdan, en azından biraz daha büyük bir alfabeyi desteklemeliyiz:
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
Vigenère meydanının yapımı hala hemen hemen aynıdır ve şifre hala aynı şekilde çalışmaktadır. Sadece biraz ... buraya tam olarak vermek hantal.
Giriş
Girdi, standart girişte her biri satır sonu ile sonlandırılan iki ayrı metin satırı olarak verilir. İlk satır anahtarı, ikincisi şifreli metni içerir.
Çıktı
Şifresi çözülmüş mesajı içeren tek bir satır.
Kazanma koşulu
Şifreleme bazen bir silah olarak kabul edildiğinden, kolay kaçakçılığı kolaylaştırmak için kodun kısa olması gerekir. Ne kadar kısa olursa, keşif olasılığını azaltır.
Örnek giriş 1
Key
miQ2eEO
Örnek çıktı 1
Message
Örnek giriş 2
ThisIsAKey
CoqKuGRUw29BiDTQmOpJFpBzlMMLiPb8alGruFbu
Örnek çıktı 2
ThisWorksEquallyWellWithNumbers123894576
Bir hafta geçti. Şu anda en kısa çözüm kabul edildi. İlgilenenler için, yarışmamızda aşağıdaki önerileri ve uzunlukları aldık:
130 - Python
146 - Haskell
195 - C
197 - C
267 - VB.NET
Ve diğerleri ile sıralanmayan kendi çözümlerimiz:
108 - Yakut
139 - PowerShell