0

ポリアルファベット暗号用の Java プログラムを作成しています。私はコードのこのセクションを持っています:

while (i != 4 && count != cipherlen) {
    if ((((int) ciphertext.charAt(i)) - 65) == 0) {
        plaintext[count] = (char) (90 - (((int) keyreader.charAt(i)) - 65));
    }

    if ((((int) keyreader.charAt(i)) - 65) > (((int) ciphertext
            .charAt(i)) - 65)) {
        System.out.println("first");

        plaintext[count] = ((char) (90 - ((((int) keyreader.charAt(i)) - (65)) - (((int) ciphertext
                .charAt(i)) - 65))));
        //System.out.println(text);
    }
    else {
        //System.out.println("second");
        plaintext[count] = ((char) ((((int) ciphertext.charAt(count)) - ((int) keyreader
                .charAt(i))) + 64));
    }
}

の値に遭遇した場合を除いて、すべてのケースで適切に機能します。暗号テキストが A であると仮定すると、65 を減算します。その場合、ダミーの値が与えられます。

問題が何であるかを判断するのを手伝ってもらえますか?

を鍵にして暗号文AAADNIFQFWBACPすると、生成される平文はMHEMEVA=BO

4

1 に答える 1

0

Java ではchar、数値型です。char他の型にキャストせずに、値に対して算術演算を実行できます。

それで、あなたのコードを漠然と読める同等のものに翻訳することから始めましょう...

while (i != 4 && count != cipherlen) {
    if (ciphertext.charAt(i) == 'A') {
        plaintext[count] = 'Z' - (keyreader.charAt(i) - 'A');
    }

    if (keyreader.charAt(i) > ciphertext.charAt(i)) {
        System.out.println("first");

        plaintext[count] = 'Z' - (keyreader.charAt(i) - 'A') - 
                           (ciphertext.charAt(i) - 'A');
        //System.out.println(text);
    }
    else {
        //System.out.println("second");
        plaintext[count] = ciphertext.charAt(count) - 
                           keyreader.charAt(i) + ('A' - 1));
    }
}

この時点で、私は次のことを観察します。

  • あなたが何をしようとしているのか、あなたのコードからはわかりません。それは単に意味がありません。
  • 実際に行っていることは一見すると可逆暗号化ではないように見えます。
  • このコンテキストでの「ダミー値」の意味がわかりません。
  • countまたはcipherlenまたはを変更しないためi。ループ本体は、ゼロ回または無限回実行されます。これは、ほとんどの場合、「正しく機能している」という質問であなたが言ったことと矛盾しています。

ここで実装しようとしている暗号化プロセスの説明を英語で提供し、表示されると予想されるものと実際に表示されるものを明確に説明していただけると助かります。

于 2013-02-18T03:14:33.407 に答える