-3

文字値を数値形式に変換し、「キー」を追加してから文字形式に変換し、単語を暗号化する基本的な暗号化プログラムを作成しようとしています。

ただし、数値を90以上(文字Z)にして、65(文字A)にループバックする方法がわかりません。

public class Encode {

    /**
     * Main method - this does not need to be changed at all.
     */
    public static void main(String[] args) {
        testing();
        userInteraction();
    }

    /**
     * This method is used to test the encrypt method.
     */
    public static void testing() {

        String testMessage1 = "test";
        int testKey1 = 11;
        String result = encrypt(testMessage1, testKey1);
        System.out.println("Encrypted result: "+result);
    }

    /**
     * This method changes each character in a String to a
     * different character based on the key passed in as
     * an integer. The new String created by the encryption
     * process is returned.
     *
     * @param message   the String to be encoded
     * @param key       the integer value used for encryption
     * @return          a new encoded String
     */
    public static String encrypt(String message, int key) {
        System.out.println("encoding: "+message+", with key: "+key);
        String encodedMessage = "";
        message=message.toUpperCase();

        int length = message.length();
        for(int i=0;i<length;i++)
        {
            int characterValue = (int)message.charAt(i);
            characterValue = characterValue + key;
                if(characterValue>90)
                {
                    characterValue = (65 + key ); // <---- What needs to go here? In order to make value loop back to A.
                }

            char myChar = (char)characterValue;
            encodedMessage=encodedMessage+myChar;
        }


        return encodedMessage;
    }
4

1 に答える 1

0

まず、あなたの暗号化があいまいであると言って始めましょう。そうは言っても、 に変更characterValue = (65 + key );してください。characterValue = ((characterValue - 90) + 65);
また、 にキーを 2 回追加していましたcharacterValue>90

よし、もう少し例を挙げて説明しよう。
この行characterValue = characterValue + key;では、すでにキーがレターに追加されているため、 内のコードから削除しましたif。この部分に例は必要ないと思います。

次の部分、合計自体:
誰かがキー 11 で AZTEST と入力したとします。結果は次のようになります (キーを追加し、90 より大きい場合は最初からやり直します): LLFPEF

A(65):(76)L
Z(90):(101->76)L
T(84):(95->70)F
E(69):(80)P
S(83):(94->69)E
T(84):(95->70)F

例として 'S' を使用すると、83 + 11 = 94 になります。94 は 90 よりも大きいので、次のようにする必要があります。まず、それがどれだけ超えているかを調べます (94 - 90 = 4)。その数が得られたので、カウントオーバーを開始する必要があります。A=65 なので、65+4=69 です。69 = E.

問題は、Z が別の値と同じになることです。Z が A と異なる唯一のキーは、この場合はキー = 0 ですが、元のテキストに変更がないため、暗号化は破られます。

于 2015-10-05T01:47:17.447 に答える