タグ付けされた質問 「cryptography」

暗号化に関する課題:暗号化または復号化。

4
Shifty XORyption
プログラムまたは関数(またはプログラム/関数のセット)を作成して、次の仕様でデータを暗号化および復号化します。 暗号化 各バイトを相互にXOR演算することにより、入力のXORハッシュを計算します。 入力のすべてのバイトをこのハッシュでXORします。 結果を4ビット左にシフトします。 XORハッシュの最初の4ビットで左側を埋め込みます。 XORハッシュの最後の4ビットを右側に埋め込みます。 例 与えられた入力:"G0lf"(0x47306C66) XORハッシュを計算します。 0x47 ^ 0x30 ^ 0x6C ^ 0x66 = 0x7D ハッシュごとにすべてのバイトをXORします。 0x3A4D111B 期待される結果(シフトとパッドの後): ()"s¤Ñ\x11½"0x73A4D111BD ルール プログラム/関数は、入力/出力が実際のバイトである限り、選択したゴルフ言語(文字列、バイト配列など)で意味のある任意のタイプの入出力を行うことができます。たとえば、16進文字列を出力することはできません。 暗号化と復号化は、個別のプログラム(スコアはそれらの合計サイズになります)または単一のプログラムに分離できます。単一のメソッドは、暗号化または復号化する必要があるかどうかの引数を取ることができます。 暗号化の入力は、少なくとも1バイトのサイズであると予想されます。 復号化のための入力は、少なくとも2バイトであると予想されます。 出力で非印刷バイトをエスケープする必要はありません。

8
RijndaelのSボックスを実装する
RijndaelのS-boxは、AES暗号化および復号化で頻繁に使用される操作です。通常、256バイトのルックアップテーブルとして実装されます。これは高速ですが、コード内で256バイトのルックアップテーブルを列挙する必要があることを意味します。基本的な数学的構造を考えると、この群衆の誰かがより少ないコードでそれを行うことができると確信しています。 RijndaelのSボックスを実装するお気に入りの言語で関数を記述します。最短のコードが優先されます。

3
ベーコンの暗号:ステガノグラフィの紹介
この小さな貯金箱は市場に出ました、この小さな貯金箱はいくつかのコードを書きました... ああ、そのベーコンのことではなく、サーフランシスベーコンのことです!具体的には、暗号ベーコンは、1500年代後半に、メッセージを別のメッセージ内に隠す方法、ステガノグラフィーの方法として考案しました。 暗号は、その内容ではなく、テキストの表示でメッセージを隠すことで機能します。まず、メッセージの文字は次のようにバイナリ(0〜25)にエンコードされます。 注:コード内で次のエンコードを使用してください。入力内の数字、スペース、またはその他の記号については心配しないでください。ただし、エンコードにこれらの文字を含める人にはいくつかのボーナスを考案できます。他の記号を含める場合、文字はエンコードのスペース0〜25を占める必要があります。 Letter Encoding A AAAAA B AAAAB C AAABA D AAABB E AABAA F AABAB G AABBA H AABBB I ABAAA J ABAAB K ABABA L ABABB M ABBAA N ABBAB O ABBBA P ABBBB Q BAAAA R BAAAB S BAABA T BAABB U BABAA V BABAB …

9
シーザーズシフト
説明 シーザーシフトは非常に単純な単一アルファベット暗号で、アルファベットの各文字がその後の文字に置き換えられます。例: Hello world! -> IFMMP XPSME! (IBSLR, EGUFV!実際のチャレンジの出力です。これは1シフトした例です。) ご覧のとおり、間隔と句読点は調整されていません。ただし、メッセージの推測を防ぐため、すべての文字は大文字です。文字を戻すことで、メッセージは解読され、便利になりましたが、メッセージの意味を知らないはずの人が解読するのも簡単です。 そこで、高度な形式の暗号を使用して、Caesarを少し支援します:Self-shifting Caesar Shift! チャレンジ あなたの仕事は、暗号化する文字列が与えられると、入力に対応する暗号化された文字列を出力するプログラムまたは関数を書くことです。高度なシーザーシフトは次のように機能します。 1. Compute letter differences of all adjacent letters: 1.1. Letter difference is computed like this: Position of 2nd letter in the alphabet -Position of 1st letter in the alphabet ======================================= Letter difference 1.2. Example input: …

3
Brainfuckのビット演算子
あなたの仕事は、以下の二項演算子のそれぞれに対して1つのBrainfuckプログラムを作成することです。各プログラムは、入力から1つまたは2つの8ビット数(AおよびB)を取得し、指定された操作を計算する必要があります。 A XOR B A AND B A OR B A Shifted Left by 1 (circular shift) NOT A 5つすべてを実装する必要はありません。スコアは次の方法で計算されます。 #totalCharacters + {4000 * #problemsNotCompleted} したがって、有効なスコアはゼロ(最高)から20,000(何も完了していない)までです。 結果を保存する場所や、入力を保存するかどうかは気にしません。8ビットセル、および必要なだけの空のセルを右側にのみ想定します。 最適なメモリ位置に番号がすでにあると仮定することができるので、IO操作を心配する必要はありません。
13 code-golf  binary  brainfuck  code-golf  code-golf  ascii-art  random  code-golf  code-golf  code-challenge  sorting  code-golf  code-challenge  java  code-golf  statistics  code-golf  code-challenge  fastest-code  code-golf  math  code-golf  math  kolmogorov-complexity  code-golf  code-golf  array-manipulation  combinatorics  code-golf  kolmogorov-complexity  popularity-contest  underhanded  code-golf  math  floating-point  code-golf  interpreter  code-golf  music  code-golf  code-golf  cryptography  code-challenge  scrabble  code-golf  code-challenge  popularity-contest  quine  code-golf  quine  cryptography  code-golf  kolmogorov-complexity  code-golf  printable-ascii  code-golf  chess  code-golf  math  number-theory  code-challenge  c  code-golf  random  popularity-contest  hello-world  code-shuffleboard  code-golf  compression  grammars  code-golf  tips  code-golf  sequence  code-golf  string  code-challenge  sorting  permutations  code-golf  string  code-challenge  optimization  code-golf  interpreter  code-challenge  string  code-golf  math  number  fibonacci  string  compression  c#  code-golf  chemistry  popularity-contest  math  c  c++  java  code-golf  math  function  code-golf  complex-numbers  code-golf  geometry 

12
ワンタイムパッドを実装する
バックグラウンド ワンタイムパッドが適切に使用されている場合、クラックすることは不可能であることが証明されている暗号化の形式です。 暗号化は、プレーンテキスト(A〜Zの文字のみで構成される)を取得し、同じ長さの(ランダムな文字のみの)ランダム文字列を生成することにより実行されます。この文字列はキーとして機能します。次に、平文の各文字は、キーの対応する文字とペアになります。暗号文は次のように計算されます。各ペアについて、両方の文字が数字に変換されます(A = 0、B = 1、... Z = 25)。2つの数値はモジュロ26で加算されます。この数値は文字に変換されます。 解読は正反対です。暗号文とキーの文字はペアになり、数字に変換されます。次に、キーは26を法とする暗号文から減算され、結果は文字AZに変換されます。 チャレンジ あなたの課題は、ワンタイムパッドの暗号化と復号化の両方が可能な最短のプログラムを作成することです。 (STDINへの)入力の最初の行には、単語「ENCRYPT」または単語「DECRYPT」があります。 単語が暗号化されている場合、次の行はプレーンテキストになります。プログラムは、2行を(STDOUTに)出力する必要があります。1行目はキー、2行目は暗号文です。 単語が復号化されると、プログラムはさらに2行の入力を取得します。最初の行がキーになり、2番目の行が暗号文になります。プログラムは、復号化された平文である1行を出力する必要があります。 平文、暗号文、およびキーは常に大文字のA〜Zで構成する必要があります。それらは常に単一行であり、空白は含まれません。 キーは常にランダムでなければなりません。実行間でその大部分を繰り返すことはできません。また、テキストにパターンを見つけることはできません。 2つの簡単な例: ENCRYPT HAPPYBIRTHDAY >ABKJAQLRJESMG >HBZYYRTICLVME DECRYPT ABKJAQLRJESMG HBZYYRTICLVME >HAPPYBIRTHDAY >あなたが出力としてそのシンボルを印刷する必要はありませんので、出力される行を表します。

2
Kippleを解釈してください!
前書き Kippleは、2003年3月にRune Bergによって発明されたスタックベースの難解なプログラミング言語です。 Kippleには、27のスタック、4つの演算子、および制御構造があります。 スタック スタックは命名されているa- zと32ビット符号付き整数を含んでいます。また@、数値の出力をより便利にするための特別なスタックがあります。数字がにプッシュされる@と、その数字の数字のASCII値が実際にプッシュされます。(たとえば、12を@に押した場合、49を押し、次に50を押し@ます。) iプログラムが実行される前に、入力が入力スタックにプッシュされます。インタープリターは、i実行前に保存する値を要求します。実行が終了すると、出力スタック上のすべてoがポップされ、ASCII文字として出力されます。これはKippleの唯一のIOメカニズムであるため、Kippleプログラムとの対話は不可能です。 オペレーター オペランドは、スタック識別子または符号付き32ビット整数のいずれかです。 プッシュ:>または< 構文:Operand>StackIndentifierまたはStackIndentifier<Operand Push演算子は、オペランドを左に取り、指定されたスタックにプッシュします。たとえば12>a、値12をstackにプッシュしますa。a>bstackから一番上の値をポップし、stack aにプッシュしますb。空のスタックをポップすると常に0 a<bが返されb>aます。これはと同等です。a<b>c最上位から値ポップbの両方にとプッシュをcしてa。 追加: + 構文: StackIndentifier+Operand 追加演算子は、スタックの一番上の項目とオペランドの合計をスタックにプッシュします。オペランドがスタックの場合、値はそこからポップされます。たとえば、スタックの最上位の値aが1の場合、a+23をプッシュします。aが空の場合、a+22をプッシュします。スタックの一番上の値場合aとbがある1と2は、a+bスタックから値2をポップアップ表示されますbし、スタックに3を押しますa。 減算: - 構文: StackIndentifier-Operand Subtract演算子は、Add演算子とまったく同じように機能しますが、加算ではなく減算する点が異なります。 晴れ: ? 構文: StackIndentifier? Clear演算子は、最上位のアイテムが0の場合、スタックを空にします。 インタープリターは演算子の隣にないものをすべて無視するため、次のプログラムが機能しますa+2 this will be ignored c<i。ただし、コメントを追加する適切な方法は、#文字を使用することです。a #と行末文字の間のすべてのものは、実行前に削除されます。ASCII文字#10は、Kippleの行末として定義されています。 オペランドは2つの演算子で共有a>b c>b c?できますa>b<c?。たとえば、と書くことができます。 プログラム1>a<2 a+aはa、値を[1 4](下から上へ)含むようになり、ではありません[1 3]。-オペレーターも同様です。 制御構造 Kippleには、ループという制御構造が1つしかありません。 構文: (StackIndentifier code ) …
12 code-golf  interpreter  code-golf  string  code-golf  math  string  code-golf  ascii-art  path-finding  code-golf  string  ascii-art  code-golf  interpreter  binary  logic-gates  logic  code-golf  ascii-art  code-golf  graph-theory  code-golf  string  code-golf  number  sorting  code-golf  number-theory  random  cryptography  polynomials  code-golf  number  code-golf  math  number  sequence  code-golf  quine  code-generation  code-golf  arithmetic  set-theory  code-golf  sequence  code-golf  code-golf  string  math  fastest-code  optimization  code-golf  code-golf  internet  stack-exchange-api  code-golf  array-manipulation  code-golf  string  internet  string  code-challenge  internet  test-battery  code-golf  math  pi  code-golf  arithmetic  primes  code-golf  array-manipulation  code-golf  string  code-golf  string  palindrome  code-golf  sequence  number-theory  fastest-algorithm  code-golf  math  number  base-conversion  code-golf  number-theory  sorting  subsequence  search  code-golf  permutations  code-challenge  popularity-contest  code-generation 

2
不可解なキッカー//
不可解なキッカー テキストを暗号化する一般的だが安全ではない方法は、アルファベットの文字を入れ替えることです。言い換えると、アルファベットの各文字は、テキスト内で一貫して他の文字に置き換えられます。暗号化が可逆的であることを保証するために、2つの文字が同じ文字に置き換えられることはありません。あなたの仕事は、各行が異なる置換のセットを使用し、解読されたテキストのすべての単語が既知の単語の辞書からであると仮定して、テキストのいくつかのエンコードされた行を解読することです。 入力 入力は、アルファベット順の小文字の単語で構成されます。これらの単語は、復号化されたテキストに表示される単語の辞書を構成します。辞書に続いて、入力のいくつかの行があります。各行は上記のように暗号化されます。 辞書にあるのは1,000語以下です。16文字を超える単語はありません。暗号化された行には小文字とスペースのみが含まれ、長さは80文字を超えません。 出力 各行を復号化し、標準出力に出力します。複数の解決策がある場合は、いずれでも解決できます。解決策がない場合は、アルファベットのすべての文字をアスタリスクに置き換えます。 サンプル入力 and dick jane puff spot yertle bjvg xsb hxsn xsb qymm xsb rqat xsb pnetfn xxxx yyy zzzz www yyyy aaa bbbb ccc dddddd サンプル出力 dick and jane and puff and spot and yertle **** *** **** *** **** *** **** *** …

20
暗号ハッシュゴルフ(強盗)
このコンテストは終了しました。 警官のチャレンジには、クラック可能な答えは残っていません。 暗号ハッシュゴルフのコンパニオンスレッド 念のため、主な課題からの強盗のルールを以下に示します。 仕事 スレッドの強盗に次のように掲載することにより提出警官のいずれかをクラック:二つのメッセージMとNでIように H(M)= H(N)およびM≠N 。 得点 各警官の提出物をクラックすると、1ポイントが得られます。最も多くのポイントを持つ強盗が勝ちます。 同点の場合、最長の提出をクラックした縛られた強盗が勝ちます。 追加のルール すべての警官の提出は、一度しかクラックできません。 警官の提出が実装定義または未定義の動作に依存している場合、マシン上で(検証可能に)動作するクラックを見つけるだけで済みます。 各クラックは、強盗のスレッドの個別の回答に属します。 無効なクラッキングの試みを投稿すると、その特定のサブミッションを30分間クラッキングできなくなります。 あなた自身の提出物をクラックすることはできません。 例 Python 2.7、user8675309による22バイト 1 そして 18 リーダーボード eビジネス:クラック3回、393バイト MartinBüttner:クラック3回、299バイト jimmy23013:3つのクラック、161バイト Sp3000:3つのクラック、44バイト tucuxi:2つのクラック、239バイト Vi .:クラック2回、87バイト feersum:1クラック、216バイト mathmandan:1クラック、139バイト squeamish ossifrage:クラック1、134バイト

1
整数操作によりIEEE 754 64ビットのバイナリ浮動小数点数を実装します
(とりあえず質問「C」にタグを付けましたが、共用体をサポートする別の言語を知っている場合は、それも使用できます。) あなたの仕事は+ - * /、次の構造体の4つの標準的な数学演算子を作成することです。 union intfloat{ double f; uint8_t h[8]; uint16_t i[4]; uint32_t j[2]; uint64_t k; intfloat(double g){f = g;} intfloat(){k = 0;} } 演算自体は整数部分のみを操作またはアクセスするため(演算中にdoubleと比較することはありません)、結果はまったく同じです(またはのような非数値の結果の場合は機能的に同等ですNaN)対応する数学演算がdouble代わりに直接適用されたかのように。 操作する整数部分を選択できます。おそらく、異なる演算子間で異なる部分を使用することもできます。(ユニオンのフィールドのいずれかから「unsigned」を削除することもできますが、それを実行するかどうかはわかりません。) スコアは、4つの演算子のそれぞれの文字のコードの長さの合計です。最低スコアが勝ちます。 IEEE 754規格に慣れていない私たちの人のために、ここではウィキペディアにそれについての記事です。 編集: 03-06 08:47 intfloat構造体にコンストラクタを追加しました。double /などを手動で設定するのではなく、テストに使用できます。

1
壊れた暗号を破る
乗算およびモジュラス法を使用して、2つの数値をカオス的に循環させる単純なランダムジェネレーターを設計しました。そのためにうまく機能します。 しかし、暗号ジェネレータとして使用する場合、攻撃者が一連の乱数からシードをリバースエンジニアリングできるため、既知のプレーンテキスト攻撃に対して脆弱です。 暗号が壊れていることを証明するために、可能な限り少ない電力、CPU時間などを使用して、[0; 255]の範囲で連続して7つのゼロを生成するシード値の正当なペアを見つけます。 JavaScriptで作成されたランダムジェネレーターを次に示します。 function seed(state1,state2){ //Constants var mod1=4294967087 var mul1=65539 var mod2=4294965887 var mul2=65537 function random(limit){ //Cycle each state variable 1 step state1=(state1*mul1)%mod1 state2=(state2*mul2)%mod2 //Return a random variable return (state1+state2)%limit } //Return the random function return random } //Initiate the random generator using 2 integer values, //they must …

9
隠されたメッセージをデコードします!
前書き ある日、突然CIAのオフィスでリラックスしていましたが、突然コンピューターにアラートが表示されました。あなたのプログラムは何百ものコード化されたメッセージを傍受しました!簡単な検査でエンコードのルールが明らかになりますが、高速でデコードするにはプログラムが必要です。 チャレンジ コンマで区切られた文字列のリストが表示されます。各文字列には次のいずれかが含まれます。 コード化されたメッセージの一部 それがフォームにないならコード化されたメッセージの一部ですa=b。それがそうならメッセージの一部であることに注意してくださいab=c。この文字列をコード化されたメッセージに追加します。 エンコードスキームの一部 これはの形式になりa=bます。つまり、メッセージ内のすべてのaをbに置き換える必要があります。これはである可能性があることに注意してくださいa==。つまり、すべてのaを=に置き換える必要があります。 プログラムは、見つかったスキームを使用してデコードされたメッセージを出力する必要があります。 その他の情報:入力には、文字列を区切るためのカンマのみが含まれます。!1#など、他の文字を含めることができます。大文字は含まれません。デコード情報のビットは互いにデコードしません。メッセージのみがデコード情報の影響を受けます。各文字に対して1つの置換のみが与えられます。たとえば、no"io,"i=u","i=g" 例 入力:"ta","y=s","y","a=e","b=t","b"," ","j","j=1" 出力:test 1 入力:"z=p","zota","g=e","yugkb","y=t","u=o","k=s","li","fg","b==" 出力:potatoes=life 入力:"p","=","==n","ot","p=a","hiz","i=e","z=r" 出力:another これはcode-golfなので、バイト単位の最短回答が勝ちです!

5
CipherSaber暗号化
以下に説明するように、CipherSaber暗号化プログラムを実装します。ガイドライン: バイト単位の最小のエントリが優先されます。 ただし、コードゴルフの標準からの逸脱では、たとえ重要なゴルフエントリでなくても、興味深いエントリを投稿することを歓迎します。 通常、エントリは、標準入力からプレーンテキストを取得し、暗号テキストを標準出力に書き込み、ユーザーが指定した方法でキーを(ユーザーが)指定するプログラムです。 ただし、これをプロシージャとして実装する場合は、それでも問題ありません。 IVは、暗号で保護された擬似乱数ジェネレータから取得する必要があります。お使いの言語がそれをサポートしていない場合は、別の言語を選択してください。;-) 暗号固有のライブラリ、システムコール、または命令(上記で規定されているPRNG以外)は使用しないでください。もちろん、一般的な低レベルのビット単位操作は大丈夫です。 CipherSaberはRC4 / Arcfourの変形なので、後者について説明することから始め、CipherSaberがそれに対して行う変更について説明します。 0. RC4 / Arcfour Arcfourは他の場所で完全に指定されていますが、完全を期すためにここで説明します。(インターネットドラフトとこの説明の間に矛盾がある場合、前者は規範的です。) キー設定 2つの配列、Sおよびをセットアップします。S2両方とも長さ256です。ここk_1で、はキーの最初のバイトでk_n、最後はバイトです。 S = [0, ..., 255] S2 = [k_1, ..., k_n, k_1, ...] (S2すべての256バイトがいっぱいになるまで、キーのバイトが何度も書き込まれます。) 次に、j0 に初期化し、256回シャッフルします。 j = 0 for i in (0 .. 255) j = (j + S[i] + S2[i]) mod 256 …

6
対角バロウズ・ウィーラー変換を解く
前書き この課題では、対角線のバロウズウィーラー変換を解きます。以下は、対角バロウズ・ウィーラー変換とは何かの一般的な概要です。メッセージをエンコードするには、最初にメッセージの長さが奇数(5、7、9など)であることを保証する必要があります。その後、あなたは、グリッドを作るnことにより、n場所、nメッセージの長さがあります。最初の行は元のメッセージです。その後の各行はその上の行ですが、1文字左にシフトし、最初の文字が後ろに移動します。例えば: Hello World ello WorldH llo WorldHe lo WorldHel o WorldHell WorldHello WorldHello orldHello W rldHello Wo ldHello Wor dHello Worl 次に、NWの各文字をSE対角線上に取り、新しい文字列に入れます。 Hello World H ello WorldH l llo WorldHe o lo WorldHel W o WorldHell r WorldHello d WorldHello e orldHello W l rldHello Wo (space) ldHello Wor …

2
パターン分析による解読
非常に単純な置換暗号を使用して暗号化された暗号化された文字列が提供されます。 問題 暗号が何であるかはわかりませんが、暗号テキストが英語であり、英語で最も頻繁に使用される文字は、この順序でetaoinshrdlucmfwypvbgkqjxzであることを知っています。許可される文字は、大文字とスペースのみです。基本的な分析を行うことができます-1文字から開始しますが、より複雑な複数文字分析に移行できます-たとえば、Uはほとんど常にQの後に続き、特定の文字のみが2回連続で来ることができます。 例 clear : SUBMARINE TO ATTACK THE DOVER WAREHOUSE AND PORT ON TUESDAY SUNRISE cipher: ZOQ DUPAEYSRYDSSDXVYSHEYNRBEUYLDUEHROZEYDANYKRUSYRAYSOEZNDMYZOAUPZE clear : THE QUICK BROWN FOX BEING QUITE FAST JUMPED OVER THE LAZY DOG QUITE NICELY cipher: TNAEPDHIGEMZQJLEVQBEMAHL EPDHTAEVXWTEODYUASEQKAZETNAERXFCESQ EPDHTAELHIARC clear : BUFFALO BUFFALO BUFFALO BUFFALO BUFFALO BUFFALO BUFFALO cipher: …

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.