コードブレーカーとコードライター


18

テキストがあり、それを友人に送信したいが、他の人に読んでほしくないとしましょう。それはおそらくあなたとあなたの友人だけがそれを読むことができるようにあなたがそれを暗号化することを意味します。しかし、問題があります。あなたとあなたの友人は暗号化方法に同意するのを忘れていたので、あなたが彼らにメッセージを送ると、彼らはそれを解読することができません!

しばらくこのことを考えた後、メッセージとともにメッセージを暗号化するコードを友人に送信することにします。あなたの友人はとても賢いので、おそらく暗号化方法を勉強することでメッセージを解読する方法を理解できるでしょう。

もちろん、他の人がメッセージを読んでいる可能性があるため、解読を可能な限り難しくする暗号化スキームを選択する必要があります(復号化スキームを図に示します)。

警官の仕事

この課題では、警官がライターの役割を果たします。つまり、文字列を文字列に変換する暗号化スキームを設計します。ただし、この暗号化スキームbijectiveなければなりません。つまり、2つの文字列を別の文字列にマッピングする必要はなく、すべての文字列は入力によってマッピングできます。入力は1つだけである必要があります。エンコードされる文字列です。

次に、暗号化を実行するコードと、コードで詳述されたスキームで暗号化された単一のメッセージを投稿します。

メッセージを送信するためにバイト単位で支払うため、スコアはコードの長さに暗号文の長さを加えたものになります。あなたの答えがひび割れている場合、あなたは無限のスコアを持っています。

1週間後、テキストを公開し、回答を安全としてマークできます。安全な答えは、解読できないものです。

強盗のタスク

強盗は、作家の友人または悪意のある中間者のいずれかとしてプレイします(実質的な違いはありませんが、そうすることがより楽しくなるかのようにロールプレイできます)。彼らは暗号化スキームと暗号文を取り、暗号化されたメッセージを見つけようとします。暗号化されたメッセージを見つけたら、コメントで投稿します。(この質問には、別の強盗のスレッドはありません。)

勝者は、最もひびの入った強盗になります。


ひびの入ったソリューションがどのように見えるかの例を次に示します。

オレンジをさらに購入する


エンコーディングが全単射の場合、ドメインとコドメインは何ですか?
リーキー修道女

どの文字の文字列?
リーキー修道女

1
@WheatWizardどの256?256 バイトは文字ではないということですか?
エリックアウトゴルファー

7
誰かが暗号的に安全な機能を使用するのを止めることは何ですか?
タトルマン

2
全単性を証明する負担は誰ですか:警官または潜在的な強盗?つまり、関数が全単射であるかどうか不明な場合、どうなりますか?
スティーブン

回答:


5

ゼリー、57 + 32 = 89バイト(クラック

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

暗号化されたメッセージ:

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

16進文字列として:

4518AAE6421973CA
9724CAB3A23F72D7
AD18855134651810
B23F1CF25BDD9036

説明:

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

どこNの文字列によって符号化された“¡ḟċ⁷Ḣṡ⁵ĊnɠñḂƇLƒg⁺QfȥẒṾ⁹+=?JṚWġ%Aȧ’数です、105587021056759938494595233483151378724567978408381355454441180598980268016731

また、これはN上記の公開鍵を使用したRSAメソッド21です。これをクラックすることは、の2つの素因数を見つけることと同等ですN


上手。見つけたキーを使って自分の暗号化されたメッセージを解読できますが、あなたのものでは失敗するようです。:-/(予想される結果は4文字の英語以外のメッセージではありませんか?)
アーナルド


@AndersKaseorgうん。それは私が持っていたものですが、私は少し意味のある何かを期待していました。:-)
アーナウド

1
それが価値のあるもののために、ここに私が私の側で使用したコードがあります。
アーナルド

1
@AndersKaseorg Jellyは引数を評価しようとするため、nullバイトが実際に発生する可能性があります。tio.run/##y0rNyan8/9//////6jEGIKgOAA
デニス

5

ゼリー、88 + 64 = 152バイト

暗号化機能:

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

暗号化されたメッセージ:

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

16進文字列として:

9F419458213FD6CD4CB9094A10D3B0FB
8F30E0616834DB7BB517CCE1600A5E74
DD7252D5F923EA77F0E354D34B9F22CD
FB80B4CBDF21F80E94F24F9A66AB9112

説明:

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

N文字列によってエンコードされる場所:

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

これは数です

15465347049748408180402050551405372385300458901874153987195606642192077081674726470827949979631079014102900173229117045997489671500506945449681040725068819

また、これはN上記の公開鍵を使用したRSAメソッド13です。これをクラックすることは、N512ビットのの2つの素因数を見つけることと同等です。


2
私はあなたのコードのようなもの、あなたの暗号化された文字列のルックスが大好き
Skidsdev

この素晴らしいプログラムを使用し、宇宙の熱死後、数千年後にあなたの解決策を破ることができると確信しています。
ソクラティックフェニックス

試行分割による@SocraticPhoenix因数分解は、二次ふるいに近づくことはありません。
リーキー修道女

@LeakyNun私はあなたの大きな数学の言葉...理解していない
ソクラテスのフェニックス

@SocraticPhoenixは、プログラムが2から各因子を試行するのに対し、2 次ふるいははるかに高速です。あなたのプログラムは永遠にかかっていたでしょうが、それは6分で256ビットのセミプライムを因数分解することができます。
リーキー修道女

3

JavaScript(ES6)、43 + 33 = 76バイトがLeaky Nunによってクラックされました

暗号化機能、43バイト:

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

暗号化されたメッセージ、33バイト:

注意:この暗号化方法はブラウザに依存します。

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
リーキー修道女

@LeakyNun Err ...いいえ。
アーナウルド

私の答えは代わりに何を生み出しますか?
リーキー修道女

どのブラウザを使用していますか?Chromeを使用しています。
リーキー修道女

6
That was soooo easy to crack! -;)(私はそれをクラックするためにFirefoxを使用しました)
リーキー修道女

3

Braingolf、ひび割れ

(d1&,&g)&@

オンラインでお試しください!

暗号化されたメッセージ、45バイト(UTF-8)

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

暗号化されたメッセージの16進コード

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

解読されたメッセージ

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

説明

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

デコーダ

デコーダは、3文字のみを変更することで作成できます。単に削除1、および挿入$_挟ん&,&g

(d&,$_&g)&@

TIOを提供できますか?
Kritixiリソス

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

@KSmarts正しい!
Skidsdev

g文書化されていませんか?
リーキー修道女

これは全単射ですか?
リーキー修道女

3

JavaScript(ES6)、96 + 9 = 105バイト

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))

暗号文(16進エンコード): 7d111c74b99faff76a

オンラインでお試しください!

サンプル出力(V8エンジンを使用):

abc123-> db48ea4f86b9

こんにちは-> 1b3420f5ab


無効な送信:複数のプレーンテキストが同じ暗号文を生成します。例:「C」、「D」。これは最初の文字のみにカウントされます。256の可能な入力のうち、165の一意の出力のみ。
マークジェロニムス

これは、意図した範囲(ASCII zにASCIIのA)は全単射である
iovoid

私はちょうどそうではないと言った。入力文字列としてそれぞれ「C」と「D」を使用してコードを試してください。同じ出力文字列76
マークジェロニマス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.