Kod Kırıcılar ve Kod Yazarları


18

Diyelim ki biraz metniniz var ve bunu arkadaşınıza göndermesini istiyorsunuz, ancak başka kimsenin okumasını istemiyorsunuz. Bu muhtemelen şifrelemek istediğiniz anlamına gelir, böylece sadece siz ve arkadaşınız okuyabilir. Ancak, bir sorun var: siz ve arkadaşınız bir şifreleme yöntemini kabul etmeyi unuttunuz, bu yüzden onlara bir mesaj gönderirseniz, şifresini çözemezler!

Bunu bir süre düşündükten sonra, arkadaşınıza mesajınızı mesajla birlikte şifrelemek için kod göndermeye karar verdiniz. Arkadaşınız çok akıllı, bu yüzden muhtemelen şifreleme yöntemini çalışarak mesajın şifresini nasıl çözeceklerini anlayabilirler.

Tabii ki, diğer insanlar mesajı okuyor olabileceğinden, çatlamayı mümkün olduğunca zorlaştıran bir şifreleme şeması seçmek istersiniz (şifre çözme şemasını bulun).

Polislerin Görevi

Bu meydan okumada, Polisler yazarın rolünü oynayacak: dizeleri dizelere dönüştüren bir şifreleme şeması tasarlayacaksınız. Ancak, bu şifreleme şeması iki yönlü olmalıdır , yani hiçbir iki dizenin başka bir dizeyle eşleşmemesi gerekir ve her dizgi bir girdi ile eşlenebilir. Yalnızca bir giriş almalıdır; kodlanacak dize.

Daha sonra şifrelemeyi gerçekleştiren bir kod ve kodunuzla ayrıntılı olarak verilen şema ile şifrelenmiş tek bir mesaj gönderirsiniz.

Bayt tarafından mesaj göndermek için ödeme yaptığınızdan, puanınız kodunuzun uzunluğu artı şifre metninin uzunluğu olacaktır . Cevabınız kırılırsa, sonsuzluk puanınız olacaktır.

Bir hafta sonra metni gösterebilir ve yanıtınızı Güvenli olarak işaretleyebilirsiniz . Güvenli cevaplar çözülemeyen cevaplardır.

Soyguncuların Görevi

Soyguncular ya yazarın arkadaşı ya da kötü niyetli orta adam olarak oynayacaktır (maddi bir fark yoktur, ancak bunu daha eğlenceli hale getiriyormuş gibi rol oynayabilirsiniz). Şifreleme şemalarını ve şifre metnini alıp şifrelenmiş mesajı anlamaya çalışırlar. Şifrelenmiş mesajı anladıktan sonra, bir yorumda yayınlarlar. (Bu soru için ayrı bir soyguncu konusu olmayacaktır.)

Kazanan en çok çatlak olan soyguncu olacak.


Çatlak bir çözümün nasıl görünebileceğine bir örnek:

Daha fazla portakal al


Kodlama iki yönlü ise, alan adı ve alan adı nedir?
Leaky Nun

Hangi karakterlerle dizeler?
Leaky Nun

1
@WheatWizard Hangi 256? Yani karakter değil, 256 bayt değil mi?
Outgolfer Erik

7
Birisinin kriptografik olarak güvenli bir işlev kullanmasını engellemek için ne yapmalı?
Tutleman

2
Kişiliği kanıtlamanın yükü kim: polis veya potansiyel soyguncular? Yani, bir fonksiyonun iki yönlü olup olmadığı bilinmiyorsa ne olur?
Stephen

Yanıtlar:


5

Jöle , 57 + 32 = 89 bayt ( çatlak )

“¡ḟċ⁷Ḣṡ⁵ĊnɠñḂƇLƒg⁺QfȥẒṾ⁹+=?JṚWġ%Aȧ’
O‘ḅ256b¢*21%¢ḅ¢ḃ256’Ọ

Şifreli mesaj:

EªæBsÊ$ʳ¢?r×­Q4e²?ò[Ý6

Onaltılı bir dize olarak:

4518AAE6421973CA
9724CAB3A23F72D7
AD18855134651810
B23F1CF25BDD9036

Açıklama:

O‘ḅ256b¢*21%¢ḅ¢ḃ256’Ọ
O                     convert each into codepoint
 ‘ḅ256                convert from bijective base 256 to integer
      b¢              convert from integer to base N
        *21           map each to its 21th power
           %¢         modulo N
             ḅ¢       convert to integer from base N
               ḃ256’  convert from integer to bijective base 256
                    Ọ convert each from codepoint

Nerede sayı olan Ndize tarafından kodlanır .“¡ḟċ⁷Ḣṡ⁵ĊnɠñḂƇLƒg⁺QfȥẒṾ⁹+=?JṚWġ%Aȧ’105587021056759938494595233483151378724567978408381355454441180598980268016731

Ayrıca, bu Nyukarıda verilen RSA yöntemidir ve ortak anahtardır 21. Bunu kırmak, iki ana faktörün bulunmasıyla eşdeğerdir N.


İyi. Bulduğum anahtarla kendi şifreli mesajımın şifresini çözebiliyorum, ancak sizinkiyle başarısız görünüyor. : - / (Beklenen sonuç 4 karakterli İngilizce olmayan bir mesaj değil, değil mi?)
Arnauld


@AndersKaseorg Yup. Sahip olduğum şey bu, ama biraz daha anlamlı bir şey bekliyordum. :-)
Arnauld

1
Değer için, işte yanımda kullandığım kod.
Arnauld

1
@AndersKaseorg Jelly argümanlarını değerlendirmeye çalışır, bu nedenle boş baytlar gerçekten mümkündür. tio.run/##y0rNyan8/9//////6jEGIKgOAA
Dennis

5

Jöle , 88 + 64 = 152 bayt

Şifreleme işlevi:

“¥@ɦ⁺€€Ṅ`yȤDƁWĊ;Y^y⁻U ⁸ßɠƁXẹṡWZc'µ÷ḷỊ0ÇtṙA×Ḃß4©qV)iḷỊDƭ Mṛ+<ṛ_idðD’
O‘ḅ256b¢*21%¢ḅ¢ḃ256’Ọ

Şifreli mesaj:

AX!?ÖÍL¹    JÓ°û0àah4Û{µÌá`
^tÝrRÕù#êwðãTÓK"Íû´Ëß!øòOf«

Onaltılı bir dize olarak:

9F419458213FD6CD4CB9094A10D3B0FB
8F30E0616834DB7BB517CCE1600A5E74
DD7252D5F923EA77F0E354D34B9F22CD
FB80B4CBDF21F80E94F24F9A66AB9112

Açıklama:

O‘ḅ256b¢*13%¢ḅ¢ḃ256’Ọ
O                     convert each into codepoint
 ‘ḅ256                convert from bijective base 256 to integer
      b¢              convert from integer to base N
        *13           map each to its 13th power
           %¢         modulo N
             ḅ¢       convert to integer from base N
               ḃ256’  convert from integer to bijective base 256
                    Ọ convert each from codepoint

NDizge tarafından nereye kodlanır:

“¥@ɦ⁺€€Ṅ`yȤDƁWĊ;Y^y⁻U ⁸ßɠƁXẹṡWZc'µ÷ḷỊ0ÇtṙA×Ḃß4©qV)iḷỊDƭ Mṛ+<ṛ_idðD’

sayı bu

15465347049748408180402050551405372385300458901874153987195606642192077081674726470827949979631079014102900173229117045997489671500506945449681040725068819

Ayrıca, bu Nyukarıda verilen RSA yöntemidir ve ortak anahtardır 13. Bunu kırmak N, 512 biti olan iki ana faktörü bulmakla eşdeğerdir .


2
Şifrelenmiş dizenin kodunuza benzediğini seviyorum
Skidsdev

Bu harika programı kullanarak , evrenin sıcak ölümünden birkaç bin yıl sonra çözümünüzü çözebileceğime eminim.
Sokratik Phoenix

@SocraticPhoenix deneme bölümü ile çarpanlara ayırma işlemi asla ikinci dereceden eleğe yaklaşamaz.
Leaky Nun

@LeakyNun Büyük matematik kelimelerinizi anlamıyorum ...
Socratic Phoenix

@SocraticPhoenix programınız her faktörü 2'den dener, kuadratik elek çok daha hızlıdır. Bu program 6 dakika içinde 256 bitlik bir yarıçapı çarpanlarına ayırabilirken, programınız sonsuza dek sürecekti.
Leaky Nun

3

JavaScript (ES6), 43 + 33 = 76 bayt Leaky Nun tarafından kırıldı

Şifreleme işlevi, 43 bayt:

s=>[...s].sort(_=>Math.cos(i++),i=0).join``

Şifreli mesaj, 33 bayt:

Not: Bu şifreleme yöntemi tarayıcıya bağlıdır.

FireFox: "ty a)s kaasoeocr!hTt; o s  -cwaoo"
Chrome : "oht aasoaoas   e)tosr;oky c!-cw T"
Edge   : "tskso ;- caroteoTha wa soo ay c!)"

T! a)o khas eotrto-c; o sa cwsaoy
Leaky Nun

@LeakyNun Err ... hayır.
Arnauld

Bunun yerine cevabım ne üretiyor?
Leaky Nun

Hangi tarayıcıyı kullanıyorsunuz? Chrome kullanıyorum.
Leaky Nun

6
That was soooo easy to crack! -;)(Ben çatlamak için firefox kullandım)
Leaky Nun

3

Braingolf, Kırık

(d1&,&g)&@

Çevrimiçi deneyin!

Şifreli mesaj, 45 bayt (UTF-8)

°Áݭїϳ{ًչםק{їϳэÁק{|э³קѡ|

Şifreli mesajın onaltılı kodları

C2 B0 C3 81 DD AD D1 97 CF
B3 C2 90 7B D9 8B D5 B9 D7
9D D7 A7 7B D1 97 CF B3 D1
8D C3 81 D7 A7 7B 7C D1 8D
C2 B3 D7 A7 D1 A1 7C C2 85

Şifresi çözülmüş mesaj

C'mon, this one's *easy*!

açıklama

(d1&,&g)&@  Implicit input from commandline args
(......)    Foreach loop, foreach codepoint of input
 d          Split into digits
  1         Push 1
   &,       Reverse
     &g     Concatenate
        &@  Print

şifre çözücü

Bir kod çözücü yalnızca 3 karakter değiştirilerek yapılabilir. Basitçe kaldırmak 1ve insert $_İnbetween &,ve&g

(d&,$_&g)&@

Bir TIO sağlayabilir misiniz?
Kritixi Lithos

1
C'mon, this one's *easy*!
KSmarts

@KSmarts Doğru!
Skidsdev

gbelgelenmemiş mi?
Leaky Nun

Bu iki yönlü mü?
Leaky Nun

3

JavaScript (ES6), 96 + 9 = 105 bayt

q=>Buffer(q).map((a,i,d)=>d[i-1]^Math.abs(1e16*Math.sin(d[i]+i))%255).sort((a,i)=>Math.tan(a*i))

Şifre metni (onaltılık kodlamalı): 7d111c74b99faff76a

Çevrimiçi deneyin!

Örnek çıkışlar (V8 motor kullanarak):

abc123 -> db48ea4f86b9

Merhaba -> 1b3420f5ab


Geçersiz gönderim: birden fazla düz metin aynı şifreleme metnini oluşturur. Örneğin: "C", "D". Bu sadece ilk karakter için geçerlidir. 256 olası giriş arasından sadece 165 benzersiz çıkış.
Mark Jeronimus

Amaçlanan aralık için iki
yönlüdür

Sadece söylemedim. Kodunuzu giriş dizesi olarak sırasıyla "C" ve "D" ile deneyin. Aynı çıkış dizesi 76.
Mark Jeronimus
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.