トラック
/
Wren
Wren
/
演習
/
単純な暗号
単純な暗号

単純な暗号

中級

説明

ヴィジュネル暗号を実装してください。 ヴィジュネル暗号は、シンプルな置換暗号です。

暗号の用語

暗号とは、文字列を暗号化、つまりエンコードするために使われるアルゴリズムです。 暗号化されていない文字列は「平文」、暗号化された文字列は「暗号文」と呼ばれます。 平文を暗号文に変換することを「エンコード」、その逆を「デコード」と呼びます。

「置換暗号」では、平文の各文字が、鍵をもとに計算された暗号文の文字に置き換えられます。 (置き換え後の文字が元の文字と同じになることもあります。)

エンコードの詳細

この暗号では、鍵は"abcd"のような一連の小文字です。 平文の各文字は、鍵の対応する文字に基づく距離だけシフト(回転)されます。 鍵の"a"はシフト量0(つまり、シフトなし)を意味します。 鍵の"b"はシフト量1を意味します。 鍵の"c"はシフト量2を意味します。以下同様です。

平文の1文字目には鍵の1文字目を、平文の2文字目には鍵の2文字目を使います。以下同様です。 平文の文字がまだ残っているのに鍵の文字がなくなったら、鍵の先頭に戻ります。

鍵が"dddddd"のように1種類の文字だけを含む場合、平文のすべての文字が同じ量(この例では3)だけシフトされます。これは回転暗号、つまりシフト暗号(シーザー暗号と呼ばれることもあります)と同じになります。 たとえば、平文"iamapandabear"は"ldpdsdqgdehdu"になります。

鍵が"a"だけ(1回以上)の場合、シフト量は0で、暗号文は平文と同じになります。

ただし、通常は鍵はもっと複雑です! 鍵が"abcd"の場合、平文の文字は0、1、2、3の距離だけシフトされます。 平文が"hello"の場合、5回のシフトが必要なので鍵は折り返し、シフト量は0、1、2、3、0になります。 "hello"の各文字にこのシフトを適用すると、"hfnoo"になります。

ランダムな鍵

鍵が指定されていない場合は、ラテン文字の小文字をランダムに少なくとも100文字並べた鍵を生成してください。

GitHubで編集する リンクは新しいウィンドウまたはタブで開きます
Wren Exercism

単純な暗号を始める準備はできましたか?

Exercismに登録すれば、117個の演習、そして本物の人間によるメンタリングとともに、Wrenを学んでマスターできます。すべて無料です。