2

ここにいる誰かがこれらのアルゴリズムの意味を知っているなら、私がそれがどのように機能するかを知らずに単にコピーしたくないので、私が理解するのを手伝ってください。

コードは次のとおりです。

1:

    public static String encryptKey(String key){
    int ch = 0;

    StringBuilder encryptedKey = new StringBuilder();

    for(int i = 0; i < key.length(); i++ ){

        ch = key.charAt(i);

        ch = ~ch;

        encryptedKey.append(ch);
    }

    return encryptedKey.toString();
    }

2:

    public String encrypt(String message, String key){

    StringBuilder encryptedMessage = new StringBuilder();
    char ch;
    int j = 0;

    for(int i = 0; i < message.length(); i++, j++ ){

        if(j >= key.length()){
            j = 0;
        }

        ch = message.charAt(i);

        ch = (char) (key.charAt(j) ^ ch);

        encryptedMessage.append(ch);

    }

    return encryptedMessage.toString();
    }

もう一度ありがとう

4

1 に答える 1

8

これらは、可逆的な方法でデータを変更するための 2 つのシンプルで標準的な (完全に安全ではありませんが、これは学習経験です) 方法です。

最初のものはch = ~ch;、文字のすべてのビットを切り替えるために使用します。したがって、たとえば、文字aASCII 97 またはバイナリ01100001は になり10011110ます。元のメッセージを取得するために暗号化されたデータにまったく同じ操作を適用できるため、これは元に戻すことができます。

2 番目の方法はより安全で、^(exclulsive-or) 演算子を使用して、キーに基づいて各文字のビットを変更します。メッセージ文字の各ビットは、キー文字の対応するビットと比較されます。ビットが同じ (両方0または両方1) の場合、暗号化されたビットは0です。ビットが異なる場合、暗号化されたビットは1. ^元のメッセージを取得するために、同じキーを使用して同じ操作を再度適用できるため、これは元に戻すことができます。

補足として、最新の暗号 (DES3 や AES など) はすべて、指定された方法でビットを「混合」するアルゴリズムと組み合わせた排他的論理和演算に基づいているため、キーを推測するのははるかに困難です。暗号文は、アルゴリズムを逆に実行するか、数学的に同等の計算上のショートカットを使用することで復号化できます。

警告と暴言: これは明らかに宿題であり、あなたとあなたの友人の両方が他の誰かの回答をコピーして不正行為をしていることを既に認めています。それは悪いことかもしれませんが、説明できない場合はさらに悪いことです。特に、コースを受講して答えをコピーしたことがある他のすべての学生は、これらの同じ2つのソリューションを作成することをお約束します. ばかばかしいほど悪いのは、暗号化が非常に単純であることです。すべてはビットの反転に帰着します。

暗号化の本質は次のとおりです。

  • メッセージの各文字を取ります。
  • あなたが発明したいくつかのルールに従って、何らかの方法でキャラクターを変更します。重要なことは、この規則を逆にすることができる必要があるということです。たとえば、常に 3 番目のビットを に設定し1、6 番目のビットをに設定すると、0それらが元々何であったかがわからないため、機能しません。ただし、3 番目と 6 番目のビットを交換しても問題ありません。それらを再度交換して復号化するだけです。
  • 変更された文字を暗号化されたテキストとして出力に追加します。
  • 文字数がなくなるまで繰り返します。

復号化するには、同じアルゴリズムに従いますが、各文字を変更するために使用したルールを逆にします。

Uibu't bmm uifsf jt up ju. Hppe mvdl!

于 2012-05-15T02:14:25.820 に答える