logo

Python のシーザー暗号

このチュートリアルでは、Caesar Cipher と呼ばれる暗号化方式の 1 つを検討します。これは暗号化の一部です。

導入

この手法では、各文字がアルファベットの後または前にある特定の固定番号位置の文字に置き換えられます。たとえば、アルファベット B は 2 桁下の D に置き換えられます。D は F になります。この方法は、役人とのコミュニケーションに使用した人気のフリクションキャラクター、ジュリアス・シーザーにちなんで名付けられました。

それを実装するために使用されるアルゴリズムがあります。以下のことを理解しましょう。

Caesar暗号アルゴリズムの特徴

このアルゴリズムは、以下に示すいくつかの機能で構成されています。

  • この手法は非常に簡単に暗号化を適用できます。
  • 各テキストは、アルファベットの下または上の固定数の位置に置き換えられます。
  • 単純なタイプの代替暗号です。

下に移動されたテキストの後半を定義するには、整数値が必要です。この整数値はシフトとも呼ばれます。

np.クリップ

この概念は、スキーマ A = 0、B = 1、C = 2、D = 3…….. Z = 25 に従って、最初に文字を数字に変換することにより、モジュラー算術を使用して表現できます。

次の数式を使用して、n 文字をシフトできます。

復号化する方法は?

復号化は暗号化と同じです。逆のパスにシフトして元のテキストを復号化する関数を作成できます。ただし、モジュールの下で暗号の循環プロパティを使用できます。

セマンティックエラー

暗号(n) = 復号(26-n)

復号化にも同じ関数を使用できます。代わりに、shifts = になるようにシフト値を変更します。 26 - シフト。

Python のシーザー暗号

次の例を理解してみましょう -

例 -

配列リスト.ソート
 def encypt_func(txt, s): result = '' # transverse the plain txt for i in range(len(txt)): char = txt[i] # encypt_func uppercase characters in plain txt if (char.isupper()): result += chr((ord(char) + s - 64) % 26 + 65) # encypt_func lowercase characters in plain txt else: result += chr((ord(char) + s - 96) % 26 + 97) return result # check the above function txt = 'CEASER CIPHER EXAMPLE' s = 4 print('Plain txt : ' + txt) print('Shift pattern : ' + str(s)) print('Cipher: ' + encypt_func(txt, s)) 

出力:

 Plain txt : CEASER CIPHER EXAMPLE Shift pattern : 4 Cipher: HJFXJWsHNUMJWsJCFRUQJ 

上記のコードは、一度に一度に文字を走査しました。テキストの暗号化と復号化の手順に応じて、ルールに従って各文字を転送します。

暗号文を生成する位置の特定のセットをいくつか定義しました。

シーザー暗号アルゴリズムの侵害

暗号文はさまざまな方法でハッキングできます。方法の 1 つは、 ブルートフォーステクニック、 これには、考えられるすべての復号キーを試すことが含まれます。このテクニックはそれほど難しいものではなく、多くの努力を必要としません。

次の例を理解してみましょう。

例 -

 msg = &apos;rGMTLIVrHIQSGIEWIVGIEWIV&apos; #encrypted msg LETTERS = &apos;ABCDEFGHIJKLMNOPQRSTUVWXYZ&apos; for k in range(len(LETTERS)): transformation = &apos;&apos; for s in msg: if s in LETTERS: n = LETTERS.find(s) n = n - k if n <0: n="n" + len(letters) transformation="transformation" letters[n] else: s print('hacking k #%s: %s' % (k, transformation)) < pre> <p> <strong>Output:</strong> </p> <pre> Hacking k #25: rHNUMJWrIJRTHJFXJWHJFXJW </pre> <h2>Transposition Cipher</h2> <p>Transposition cipher algorithm is a technique where the alphabet order in the plaintext is rearranged to form a cipher text. This algorithm doesn&apos;t support the actual plain text alphabets.</p> <p>Let&apos;s understand this algorithm using an example.</p> <p> <strong>Example -</strong> </p> <p>We will take the simple example called columnar transposition cipher where we write the each character in the pain text in horizontal with specified alphabet width. The vertically written texts are cipher, which create a completely unlike cipher text.</p> <p>Let&apos;s take a plain text, and apply the simple columnar transposition technique as shown below.</p> <img src="//techcodeview.com/img/python-tutorial/89/caesar-cipher-python-2.webp" alt="Caesar Cipher in Python"> <p>We placed the plain text horizontally and the cipher text is created with vertical format as: <strong>hotnejpt.lao.lvi.</strong> To decrypt this, the receiver must use the same table to decrypt the cipher text to plain text.</p> <p> <strong>Code -</strong> </p> <p>Let&apos;s understand the following example.</p> <pre> def split_len(sequence, length): return [sequence[i:i + length] for i in range(0, len(sequence), length)] def encode(k, plaintxt): order = { int(val): n for n, val in enumerate(k) } ciphertext = &apos;&apos; for index in sorted(order.ks()): for part in split_len(plaintxt, len(k)): try:ciphertext += part[order[index]] except IndexError: continue return ciphertext print(encode(&apos;3214&apos;, &apos;HELLO&apos;)) </pre> <p> <strong>Explanation -</strong> </p> <p>In the above code, we have created a function named <strong>split_len(),</strong> which spitted the pain text character, placed in columnar or row format.</p> <p>The <strong>encode()</strong> method created the cipher text with a key specifying the number of columns, and we have printed each cipher text by reading through each column.</p> <h4>Note - The transposition technique is meant to be a significant improvement in crypto security. Cryptanalyst observed that re-encrypting the cipher text using same transposition cipher shows better security.</h4> <hr></0:>

転置暗号

転置暗号アルゴリズムは、平文のアルファベットの順序を並べ替えて暗号文を作成する技術です。このアルゴリズムは、実際のプレーン テキストのアルファベットをサポートしません。

反応するjsのチュートリアル

例を使用してこのアルゴリズムを理解しましょう。

例 -

列転置暗号と呼ばれる単純な例を取り上げます。この暗号では、ペイン テキストの各文字を指定されたアルファベット幅で横書きします。縦書きの文章は暗号であり、まったく異なる暗号文を作成します。

以下に示すように、プレーン テキストを取得し、単純な列転置手法を適用してみましょう。

windows.open JavaScript
Python のシーザー暗号

平文を水平に配置し、暗号文は次のように垂直形式で作成されます。 hotnejpt.lao.lvi。 これを復号化するには、受信者は同じテーブルを使用して暗号文を平文に復号化する必要があります。

コード -

次の例を理解してみましょう。

 def split_len(sequence, length): return [sequence[i:i + length] for i in range(0, len(sequence), length)] def encode(k, plaintxt): order = { int(val): n for n, val in enumerate(k) } ciphertext = &apos;&apos; for index in sorted(order.ks()): for part in split_len(plaintxt, len(k)): try:ciphertext += part[order[index]] except IndexError: continue return ciphertext print(encode(&apos;3214&apos;, &apos;HELLO&apos;)) 

説明 -

上記のコードでは、という名前の関数を作成しました。 スプリットレン()、 これは、列形式または行形式で配置されたペイン テキスト文字を吐き出します。

エンコード() メソッドは列数を指定するキーを使用して暗号文を作成し、各列を読み取って各暗号文を出力しました。

注 - 転置技術は、暗号化のセキュリティを大幅に向上させることを目的としています。暗号分析者は、同じ転置暗号を使用して暗号文を再暗号化すると、セキュリティが向上することを観察しました。