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

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

12
ロシアの暗号規格が構造化されすぎていることの証明
この課題の目的は、選択した言語で、次の関数の不可能なほど短い実装を見つけるpことです。これを実装するCコード(出力も印刷するこのTIOリンクを参照 )と、それを含むウィキペディアページがあります。 unsigned char pi[] = { 252,238,221,17,207,110,49,22,251,196,250,218,35,197,4,77, 233,119,240,219,147,46,153,186,23,54,241,187,20,205,95,193, 249,24,101,90,226,92,239,33,129,28,60,66,139,1,142,79, 5,132,2,174,227,106,143,160,6,11,237,152,127,212,211,31, 235,52,44,81,234,200,72,171,242,42,104,162,253,58,206,204, 181,112,14,86,8,12,118,18,191,114,19,71,156,183,93,135, 21,161,150,41,16,123,154,199,243,145,120,111,157,158,178,177, 50,117,25,61,255,53,138,126,109,84,198,128,195,189,13,87, 223,245,36,169,62,168,67,201,215,121,214,246,124,34,185,3, 224,15,236,222,122,148,176,188,220,232,40,80,78,51,10,74, 167,151,96,115,30,0,98,68,26,184,56,130,100,159,38,65, 173,69,70,146,39,94,85,47,140,163,165,125,105,213,149,59, 7,88,179,64,134,172,29,247,48,55,107,228,136,217,231,137, 225,27,131,73,76,63,248,254,141,83,170,144,202,216,133,97, 32,113,103,164,45,43,9,91,203,155,37,208,190,229,108,82, 89,166,116,210,230,244,180,192,209,102,175,194,57,75,99,182, }; unsigned char p(unsigned char x) { return pi[x]; } とは p pは、2つのロシアの暗号化標準、つまりハッシュ関数Streebogとブロック暗号Kuznyechikのコンポーネントです。で、この記事(およびISO会議中)、これらのアルゴリズムの設計者は、彼らが、配列を生成したと主張しpiたランダム8ビットの順列を選ぶことで。 「不可能」な実装 256 !≈ 21684256!≈21684256! \approx 2^{1684}あります!≈ 2 1684年 8ビットに置換。したがって、与えられたランダムな順列に対して、それを実装するプログラムは、1683ビット未満しか必要としないことが予想されます。 しかし、たとえば次のCプログラムのように、複数の異常に小さい実装(ここにリストされています)が見つかりました。 p(x){unsigned char*k="@`rFTDVbpPBvdtfR@\xacp?\xe2>4\xa6\xe9{z\xe3q5\xa7\xe8",l=0,b=17;while(--l&&x^1)x=2*x^x/128*285;return l%b?k[l%b]^k[b+l/b]^b:k[l/b]^188;} 158文字しか含まれていないため、1264ビットに収まります。ここをクリックして、動作することを確認してください。 …

30
Tabula Rectaを印刷します!
Tabula Rectaを印刷します! Tabula Recta(「Vigenere Table」と呼ばれることもある)はJohannes Trithemiusによって作成され、BellasoのVigenere暗号とTrithemius暗号のすべてのバリアントを含むいくつかの暗号で使用されています。次のようになります。 ABCDEFGHIJKLMNOPQRSTUVWXYZ BCDEFGHIJKLMNOPQRSTUVWXYZA CDEFGHIJKLMNOPQRSTUVWXYZAB DEFGHIJKLMNOPQRSTUVWXYZABC EFGHIJKLMNOPQRSTUVWXYZABCD FGHIJKLMNOPQRSTUVWXYZABCDE GHIJKLMNOPQRSTUVWXYZABCDEF HIJKLMNOPQRSTUVWXYZABCDEFG IJKLMNOPQRSTUVWXYZABCDEFGH JKLMNOPQRSTUVWXYZABCDEFGHI KLMNOPQRSTUVWXYZABCDEFGHIJ LMNOPQRSTUVWXYZABCDEFGHIJK MNOPQRSTUVWXYZABCDEFGHIJKL NOPQRSTUVWXYZABCDEFGHIJKLM OPQRSTUVWXYZABCDEFGHIJKLMN PQRSTUVWXYZABCDEFGHIJKLMNO QRSTUVWXYZABCDEFGHIJKLMNOP RSTUVWXYZABCDEFGHIJKLMNOPQ STUVWXYZABCDEFGHIJKLMNOPQR TUVWXYZABCDEFGHIJKLMNOPQRS UVWXYZABCDEFGHIJKLMNOPQRST VWXYZABCDEFGHIJKLMNOPQRSTU WXYZABCDEFGHIJKLMNOPQRSTUV XYZABCDEFGHIJKLMNOPQRSTUVW YZABCDEFGHIJKLMNOPQRSTUVWX ZABCDEFGHIJKLMNOPQRSTUVWXY これは頻繁に必要ですが、インターネット上のどこからでもコピーして貼り付けることはできません。正方形のテーブルはとても長く、friggingかかるため年齢を入力して、あなたのコードはできるだけ短くする必要があります。 ルール/要件 各提出は、完全なプログラムまたは機能である必要があります。関数である場合、プログラムの下部に関数呼び出しを追加するだけで実行可能でなければなりません。他のもの(Cのヘッダーなど)を含める必要があります。 可能であれば、プログラムをテストできるサイトへのリンクを提供します。 プログラムはに何も書き込まないでくださいSTDERR。 標準の抜け穴は禁止されています。 プログラムはどのような場合でも出力できますが、印刷する必要があります(配列などではありません)。 得点 プログラムは、デフォルトでUTF-8または選択した別の文字セットで、バイトに従ってスコア付けされます。 最終的に、バイト数が最小の答えが勝ちます。 提出 回答が表示されるようにするには、次のマークダウンテンプレートを使用して、見出しから回答を開始してください。 # Language Name, N bytes N提出物のサイズはどこですか。スコアを改善する場合、古いスコアを打つことで見出しに残すことができます。例えば: …

30
StringgnirtSStringgnirtSStringgnirtS
これは比較的簡単なチャレンジです。 長さNの文字列が与えられると、文字列を前方に、次に後方に、次に前方に、次に後方に...などN回出力します。たとえば、入力が Hello! 出力する必要があります: Hello!!olleHHello!!olleHHello!!olleH オプションで、末尾の改行を1つ出力することもできます。 あなたの提出物は、完全なプログラムまたは機能のいずれかである可能性があり、任意の合理的な形式で入力および出力を行うことができます。たとえば、STDIN / STDOUT、関数の引数と戻り値、ファイルなどからIOを取得できます。入力文字列は空ではなく、印刷可能なASCIIのみを含むと安全に想定できます。新しい文字列を1行で出力する必要があります。したがって、たとえば、最後の例の出力が Hello! !olleH Hello! !olleH Hello! !olleH これは有効な解決策ではありません! 以下に、さらにいくつかのテストケースを示します。 Input: a Output: a Input: abcd Output: abcddcbaabcddcba Input: OK! Output: OK!!KOOK! Input: 4815162342 Output: 4815162342243261518448151623422432615184481516234224326151844815162342243261518448151623422432615184 Input: PPCG Output: PPCGGCPPPPCGGCPP Input: 42 Output: 4224 リーダーボード これはコードゴルフの挑戦なので、標準的な抜け穴は禁止され、バイト単位の最短回答が勝ちます!ただし、これは特定の言語で最短の回答を得るための競争でもあります。Javaの答えがperlや他のゴルフ言語の答えに勝る可能性は低いですが、Javaの最短の答えを持つことは依然として非常に印象的です。したがって、このリーダーボードを使用して両方を表示できます すべての言語の中で最も短い回答、および 個々の言語での最短回答。 回答が表示されるようにするには、次のマークダウンテンプレートを使用して、見出しから回答を開始してください。 # Language Name, N …
42 code-golf  string  code-golf  math  geometry  data-structures  repeated-transformation  code-golf  number  random  code-golf  math  rational-numbers  code-golf  ascii-art  animation  code-golf  ascii-art  number  code-golf  math  number  code-golf  data-structures  code-golf  string  parsing  code-golf  array-manipulation  random  permutations  code-golf  string  code-golf  parsing  code-golf  string  quine  code-golf  string  parsing  comment  code-golf  string  counting  natural-language  code-golf  string  decision-problem  code-golf  math  code-challenge  metagolf  test-battery  code-golf  string  code-golf  math  number  arithmetic  source-layout  code-golf  number  primes  decision-problem  code-golf  math  arithmetic  code-golf  date  code-golf  string  cryptography  code-golf  code-golf  chess  board-game  code-golf  geometry  grid  puzzle-solver  set-partitions  code-golf  number  natural-language  code-golf  ascii-art  code-golf  math  code-golf  string  ascii-art  kolmogorov-complexity  code-golf  string  natural-language  code-golf  game  board-game  tic-tac-toe  code-golf  ascii-art  hexagonal-grid  code-golf  string  comment  code-golf  internet  code-golf  sorting  code-golf  kolmogorov-complexity  unicode  code-golf  tips  code-golf  string  natural-language  code-golf  string  kolmogorov-complexity  source-layout  hello-world  code-golf  string  kolmogorov-complexity  counting  natural-language  code-golf  random  quine  code-golf  string  math  bitwise  code-golf  permutations  code-golf  string  code-golf  arithmetic 

11
酒に酔った司教
公開キー暗号化では、公開キーフィンガープリントは、より長い公開キーを識別するために使用される短いバイトシーケンスです。 特にSSHでは、サーバーが実際に通信する予定のサーバーであり、中間者攻撃の標的になっていないことを確認するために使用できます。 それらは通常16進数の文字列として表されるため、期待する指紋と比較するのはかなり退屈で面倒です。 37:e4:6a:2d:48:38:1a:0a:f3:72:6d:d9:17:6b:bd:5e 少し簡単にするために、OpenSSHは指紋をASCIIアートとして視覚化する方法を導入しました。これは次のようになります。 +-----------------+ | | | | | . | | . o | |o . o . S + | |.+ + = . B . | |o + + o B o E | | o . + . o | | .o | +-----------------+ …

30
この数値は-2の整数乗ですか?
数値が2のべき乗かどうかを判断する賢い方法があります。これはもはや興味深い問題ではないので、与えられた整数が-2の整数のべき乗かどうかを判断しましょう。例えば: -2 => yes: (-2)¹ -1 => no 0 => no 1 => yes: (-2)⁰ 2 => no 3 => no 4 => yes: (-2)² ルール プログラムまたは関数を作成し、入力を受け取って出力を提供する標準的な方法を使用できます。 入力は単一の整数であり、整数が-2の整数乗である場合は出力が真実の値であり、それ以外の場合は偽の値である必要があります。他の出力(警告メッセージなど)は許可されません。 通常の整数オーバーフロールールが適用されます。ソリューションは、すべての整数がデフォルトで制限されていない仮想バージョン(または実際のバージョン)の任意の大きな整数で動作できる必要がありますが、実装によりプログラムが実際に失敗する場合それほど大きな整数をサポートしていなくても、ソリューションは無効になりません。 任意のプログラミング言語を使用できますが、これらの抜け穴はデフォルトでは禁止されています。 勝利条件 これは、コードとゴルフのコンテストです。(選択したエンコーディングで)バイト数が最も少ない答えが勝者です。

3
ルービックキューブを解く
ルービックキューブ(3 * 3 * 3)を妥当な時間内に解決する最短のプログラムを作成し、移動します(たとえば、マシン上で最大5秒、1000回未満の移動)。 入力の形式は次のとおりです。 UF UR UB UL DF DR DB DL FR FL BR BL UFR URB UBL ULF DRF DFL DLB DBR (この特定の入力は、解決されたキューブを表します)。 最初の12個の2文字の文字列は、UF、UR、... BL位置のエッジ(U =上、F =前、R =右、B =後、L =左、D =下)であり、次の8 3文字の文字列は、UFR、URB、... DBR位置のコーナーです。 出力は、次の形式で一連の動きを示します。 D+ L2 U+ F+ D+ L+ D+ F+ U- F+ D1またはD +はD(下)面を時計回りに90度回転することを表し、L2はL面を180度回転し、U3またはU-はU面を反時計回りに90度回転することを表します。 …

23
暗号ハッシュゴルフ
このコンテストは終了しました。 警官と強盗のチャレンジの性質により、警官のチャレンジは、関連する強盗のチャレンジへの関心が減少した場合、はるかに簡単になります。したがって、ハッシュ関数を投稿することはできますが、回答は受け入れられず、リーダーボードの一部にもなりません。 この課題は、最短の実装のために検索されたハッシュ関数で衝突耐性、すなわち、同じハッシュを持つ2つの異なるメッセージを見つけるために実行不可能でなければなりません。 警官として、あなたはコードサイズと衝突抵抗の間の最良の妥協点を見つけるハッシュ関数を発明して実装しようとします。あまりにも多くのバイトを使用すると、別の警官があなたを追い出します! 強盗として、あなたは警官の機能をクラックすることで警官の試みを阻止しようとし、それらが不適切であることを証明します。これにより、アルゴリズムを強化するためにより多くのバイトが使用されるようになります! 警官の挑戦 仕事 暗号化ハッシュ関数H:I-> Oを選択して実装します。ここで、Iは2 2 30未満のすべての非負整数のセットであり、Oは2 128未満のすべての非負整数のセットです。 Hは、単一の整数、整数または整数の配列の文字列表現、またはSTDINから読み取り10進数または16進数でSTDOUTに出力する完全なプログラムを受け入れて返す実際の関数として実装できます。 得点 Hそれは抵抗するがあることを強盗は挑戦以下に定義します。 強盗が投稿後最初の168時間以内にあなたの投稿を無効にすると、クラックされたと見なされます。 Hの実装はできるだけ短くする必要があります。最短のクラックされていない提出物が警官チャレンジの勝者になります。 追加のルール Hを関数として実装する場合、上で説明したように動作するプログラム内から関数を実行するラッパーを提供してください。 プログラムまたはラッパーに少なくとも3つのテストベクトルを入力してください(入力例と対応する出力)。 Hは、自分で実装する限り、新しい設計(推奨)または既知のアルゴリズムにすることができます。あらゆる種類の組み込みハッシュ関数、圧縮関数、暗号、PRNGなどを使用することは禁じられています。 ハッシュ関数(たとえば、ベース変換)を実装するために一般的に使用されるすべての組み込みは、公正なゲームです。 プログラムまたは関数の出力は確定的でなければなりません。 x86またはx64プラットフォーム上で、またはWebブラウザー内から実行できる無料の(ビールのように)コンパイラー/インタープリターが必要です。 プログラムまたは関数は合理的に効率的で、2 2 19未満のIのメッセージを1秒未満でハッシュする必要があります。 エッジケースの場合、私のマシン(Intel Core i7-3770、16 GiBのRAM)にかかる(壁の)時間は決定的になります。 この課題の性質を考えると、出力を変更するかどうかにかかわらず、回答のコードを何らかの方法で変更することは禁止されています。 提出物がクラックされている場合(または、クラックされていない場合でも)、追加の回答を投稿できます。 回答が無効な場合(たとえば、I / O仕様に準拠していない場合)、削除してください。 例 Python 2.7、22バイト def H(M): return M%17 ラッパー print H(int(input())) 強盗チャレンジ 仕事 に次のように掲載することにより提出警官のいずれかをクラックスレッド強盗:二つのメッセージMとNでIようにH(M)= H(N)およびM≠N …

30
ROT-13変換標準入力
課題:任意の長さの入力を読み取り、入力のROT13を生成する。AZ以外のすべての文字をそのまま出力にコピーし、可能であれば大文字と小文字を区別する必要があります。 標準ストリームを読み書きできる言語はどれも公平なゲームです。

3
アンダーハンドパスワードハッシュ[終了]
Underhanded C Contestの精神で、私はUnderhanded Code Contestを始めています。このコンテストの目的は、いくつかのコードを簡単に実装し、その中に微妙なバグを隠すことです。 コンテスト あなたはアメリカのスパイ機関のIT部門で働いているロシアの秘密のほくろです。アメリカの上司から、秘密メッセージの暗号化に使用するパスワードハッシュアルゴリズムの実装を求められました。 上司は、次の機能を実装することを望んでいます。 f: String -> byte[16] パスワードをAESキーとしての使用に適した16バイトの数量に変換します。上司は安全な機能を求めています。これは、このコンテキストでは、異なるパスワード文字列が圧倒的な確率で異なる結果を生成することを意味します。たとえば、入力のmd5ハッシュを返すことは、の単純な実装になりfます。 もちろん、ロシアのスパイ機関の本当のボスは、このプロセスを破壊することを望んでいるでしょう。あなたの仕事はf、ロシア人がによって返されfたキーを使用して暗号化されたすべての秘密メッセージを解読できるように実装することです。 そのためにfは、2 ^ 128の可能な出力の小さなサブセットのみを返すように実装する必要があります。特に、fロシア人が解読したい暗号化されたメッセージごとに正しいキーを簡単にブルートフォース検索できるように、最大​​2 ^ 16の異なる結果を返す必要があります。 ただし、スパイ行為には死刑が適用されることに留意してください。キャッチされないようにするには、関数fが少なくとも2 ^ 8の異なる結果を生成する必要があります。そのため、いくつかの出力の大まかな検査でf重複が明らかになることはほとんどありません。 そして最も重要なことは、範囲を制限するために導入するコードはf、意図的なものではなく、意図的なものではないことです。 法廷に連れて行かれた場合、意図的にバグを導入したのか、偶然にバグを導入したのかについて、ある程度の疑いがなければなりません。 審査 私と私が募集する他の2人が応募作品を審査します(審査を希望する場合はメールしてください)。受賞作品に対して200の評判賞金を提供しています。提出物は5月1日までにアップロードする必要があります。 審査では、次の基準が考慮されます。 f仕様に準拠しています。つまり、2 ^ 8〜2 ^ 16の可能な出力を生成します。これらが厳しい制限であるとは思わないでください。ただし、範囲外である場合はポイントを差し引きます。 バグは、意図しない間違いの結果であると思われますか? 出力はfランダムに見えますか? の実装が短いほどf優れています。 の実装が明確であればfあるほど、より良い結果が得られます。 ノート 任意の言語を使用してコードを実装できます。バグを目立たないように隠そうとしているので、難読化されたコードは推奨されません。 過去のUnderhanded Cコンテストの受賞者の一部を見て、優れた提出物の感触をつかむことができます。 入力文字列は、印刷可能なASCII(32から126まで)になります。必要に応じて、適切な最大長を想定できます。

30
賢い人のMira気楼
むかしむかし、Quoraでこの質問/回答を読んでいた FizzBu​​zzテストに合格できないコンピューターサイエンスの学位を持つプログラマーは本当にいますか このコードは明白な答えとして与えられます for i in range(1, 100): if i % 3 == 0 and i % 5 == 0: print "FizzBuzz" elif i % 3 == 0: print "Fizz" elif i % 5 == 0: print "Buzz" else: print i もちろん、FizzBu​​zzは死ぬまでゴルフにかけられましたが、それはこの質問の目的ではありません。あなたはコメントで、4の倍数の印刷「ジャズ」などの追加条件を簡単に追加できるので、この明白な答えは素晴らしいと誰かが言及していることがわかります(同意しません。このスキームを拡張するにはO(2 ** n )コード行。) あなたの挑戦は、仲間によって判断されるようにFizzJazzBuzzの最も美しいバージョンを書くことです。 投票者が考慮すべき事項: ドライ 除算/モジュラス演算の効率 Quoraに関する回答の多くはPythonを使用していましたが、ここではそのような言語の制限はありません。 …
29 popularity-contest  code-challenge  word  popularity-contest  string  grid  language-design  code-golf  source-layout  math  fastest-algorithm  assembly  code-golf  json  code-golf  arithmetic  array-manipulation  code-golf  ascii-art  code-golf  crossword  code-golf  string  restricted-complexity  code-golf  ascii-art  kolmogorov-complexity  code-golf  string  decision-problem  balanced-string  syntax  code-golf  grid  puzzle-solver  hexagonal-grid  code-golf  math  number  sequence  code-golf  string  decision-problem  code-golf  cryptography  king-of-the-hill  code-challenge  fastest-code  code-golf  number  code-golf  code-golf  string  code-golf  cryptography  king-of-the-hill  java  code-golf  number-theory  base-conversion  code-golf  code-golf  array-manipulation  code-golf  array-manipulation  sorting  code-challenge  restricted-source  quine  code-golf  tips  python  king-of-the-hill  code-golf  source-layout  fractal  code-golf  tips  game  king-of-the-hill  path-finding  grid  code-golf  kolmogorov-complexity  natural-language  code-golf  tips  python  code-golf  number  arithmetic  sequence  array-manipulation  code-golf  number  combinatorics  random  integer-partitions  code-golf  string  code-golf  vim  comment  code-golf  combinatorics  counting  code-challenge  rosetta-stone  code-golf  combinatorics  sequence  subsequence  code-golf  code-challenge  restricted-source  primes  printable-ascii  popularity-contest  graphical-output  image-processing 

7
神経カエルの解読
神経カエルの解読 Puzzling.SEがついに両生類に取り付かれた暗号を解読したので、それを解読するプログラムまたは関数を書きましょう! (パズルを台無しにする前に見たい場合は、今すぐ上記のリンクをクリックしてください。) 暗号の仕組み 神経症カエルでO ughtへのRel AのX M UD浴場(略して「神経症カエル」)は、すべての文字は、1つのまたは2つの単語として暗号化されています。 イタリック体でない単語の長さは文字を表します。 neurotic => 8文字=> H frogs => 5文字=> E perpendicular => 13文字= M 斜体を含む単語は次の単語を変更し、斜体の単語の長さが奇数の場合は10を追加し、斜体の単語の長さが偶数の場合は20を追加します。単語の一部またはすべてを斜体にすることができます。斜体の単語の後には、常に非斜体の単語が続きます。 *o*ught to =>奇数、2 => 12 => L lo*u*nging calms =>偶数、5 => 25 => Y 平文のすべての単語は暗号文の文に対応し、平文のすべての文は暗号文の段落に対応します。 入力形式 プログラムまたは関数は、MarkdownでフォーマットされたメッセージをNeurotic Frogsで入力します。入力は、印刷可能なASCIIと改行のみで構成されます。 単語は、正規表現に一致する文字の連続です[A-Za-z0-9']。 数字と文字はどちらも単語の長さにカウントされます。QB64を表しDます。 注:アポストロフィは単語の長さにカウントされません。ではなくをIsn't表します。DE 斜体の文字は、一対のアスタリスク(*letters*)で囲まれています。 1つ以上の連続した文字を、単語全体(masseus*es*、*all*)までイタリック体にすることができます。単語内の複数の非連続文字も斜体にすることができます(g*e*n*e*rates)。 斜体は、複数の単語にまたがったり、句読点を含めたり、アポストロフィを含めたりすることはありません。 ペアになっていないアスタリスクと複数の隣接するアスタリスクは発生しません。 句読点は次の文字のいずれかです.,?!:;-()"。 文内の単語は、1つ以上の句読点文字および/または単一のスペースで区切られます。例:*all* …

24
Atbash Self Palindromes
Atbash変換について考えてみましょう。 A|B|C|D|E|F|G|H|I|J|K|L|M Z|Y|X|W|V|U|T|S|R|Q|P|O|N A⇔ZおよびL⇔Oなど。一部の単語に共通する興味深い特性があります。一部の文字列がatbashに相当するものに翻訳されると、その翻訳は元の単語と逆になります。これらをAtbash Self Palindromesと呼びます。 例として、WIZARDを翻訳しましょう: W→D I→R Z→A A→Z R→I D→W 結果はDRAZIWされ、WIZARD逆転します。したがって、WIZARDはatbash self palindromeです。 目的印刷可能なASCII文字列を与え、その文字列がatbash self palindromeである場合は真実の値を出力するか、それ以外の場合は偽の値を返します。(これは、STDIN、最も近い同等の、機能的な入力などによって行われます。言語がこれらのいずれもできない場合は、入力をハードコーディングできる別の言語を選択することを検討してください。)入力が回文であり、atbashシーケンスの影響を受けない場合でも、回文+自体が回文であるため、trueを出力する必要があります。これはcode-golfであるため、バイト単位の最短プログラムが優先されます。 テストケース "Input" => true, false "WIZARD" => true "Wizard" => true // case doesn't matter "wIzArD" => true "W I Z A R D" => true "W IZ ARD" => false …

6
ギムリ、もっと短くしますか?
私はギムリの著者の一人です。Cにはすでに2ツイート(280文字)のバージョンがありますが、どれだけ小さくできるかを確認したいと思います。 Gimli(論文、ウェブサイト)は、暗号化ハードウェアおよび組み込みシステムに関する会議(CHES)2017(9月25-28日)で発表される、高セキュリティレベルの暗号順列設計です。 タスク いつものように:Gimliの小さく使用可能な実装を、選択した言語で作成します。 することができるはず、入力として384ビット取る(...または48バイト、または12 unsigned int型の)とリターン(あなたは、ポインタを使用する場合は所定の位置に変更することができる)ギムリの結果は、これらの384ビットに適用されます。 10進数、16進数、8進数、または2進数からの入力変換が許可されます。 潜在的なコーナーケース 整数エンコードは、リトルエンディアンであると想定されます(たとえば、既にあるもの)。 名前を変更するGimliにGそれはまだ、関数呼び出しでなければなりません。 誰が勝ちますか? これはコードゴルフなので、バイト単位の最短回答が勝ちです!もちろん、標準ルールが適用されます。 リファレンス実装を以下に示します。 注意 いくつかの懸念が提起されました。 「ギャングさん、私のプログラムを他の言語で無料で実装してください。そうする必要はありません」(thx to @jstnthms) 私の答えは次のとおりです。 Java、C#、JS、Ocamlで簡単に実行できます。現在、我々(Gimliチーム)は、AVR、Cortex-M0、Cortex-M3 / M4、Neon、SSE、SSE-unrolled、AVX、AVX2、VHDL、Python3に実装(および最適化)しています。:) Gimliについて 状態 Gimliは、一連のラウンドを384ビット状態に適用します。状態は、次元3×4×32の平行六面体、または同等に、32ビットワードの3×4マトリックスとして表されます。 各ラウンドは、3つの操作のシーケンスです。 非線形層、具体的には各列に適用される96ビットSPボックス。 2ラウンドごとに、線形混合層。 4ラウンドごとに、一定の追加。 非線形レイヤー。 SPボックスは3つのサブ操作で構成されています。1番目と2番目の単語の回転。3入力の非線形T関数。そして、最初と3番目の単語の交換。 線形レイヤー。 リニアレイヤーは、Small-SwapとBig-Swapの2つのスワップ操作で構成されます。スモールスワップは、1ラウンド目から4ラウンドごとに発生します。ビッグスワップは、3ラウンド目から4ラウンドごとに発生します。 ラウンド定数。 ギムリには24ラウンド、24、23、...、1の番号が付けられています。ラウンド数rが24,20,16,12,8,4の場合、ラウンド定数(0x9e377900 XOR r)を最初の状態ワードとXORします。 Cの参照ソース #include <stdint.h> uint32_t rotate(uint32_t x, int bits) { if (bits == …

22
PKCS#7パディング検証
暗号化では、PKCS#7パディングは、N≥1のバイト数を追加するパディング方式で、追加される各バイトの値はNに等しくなります。 たとえば、Hello, World!13バイトの16進数は次のとおりです。 48 65 6C 6C 6F 2C 20 57 6F 72 6C 64 21 長さ16にPKCS#7パッドを選択すると、結果は次のようになります。 48 65 6C 6C 6F 2C 20 57 6F 72 6C 64 21 03 03 03 そして、長さ20までパディングすることを選択した場合、結果は次のようになります。 48 65 6C 6C 6F 2C 20 57 6F 72 6C 64 21 07 07 07 …

13
これは何のROTですか?-ROT-nの復号化
以下に、頻度の高い順に英語のアルファベットの文字を示します。 e t a o i n s h r d l c u m w f g y p b v k j x q z つまりe、最も頻繁に使用される文字でありz、最も一般的ではありません。(ウィキペディアからのデータ。) あなたの課題は、次のようないくつかのROT-n'dテキストを取得することです。 ocdndnvqzmtnzxmzohznnvbzocvodnqzmtnzxpmzviynvaz これは、ROT-21(42の半分)を介して「暗号化」されたテキスト「thisisaverysecretmessage thatvery secure and safe」です。プログラムは、上記の頻度表を使用して、各文字がどれだけ回転したかと元のテキストによって判断できるはずです。 (ROT-nに慣れていない場合は、基本的に各文字をn。でシフトします。たとえば、ROT-2では、a -> c, b -> d, ..., x -> z, y -> a, z -> …

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