1
public class Encryption {
private static final int[] encrypt = {2, 9, 3, 4, 6, 8, 1, 0};
private static final int[] decrypt = new int[8];
private static final int minLength = 10;

String encrypt (String password)    {
    if(password.length()<minLength) {
        return password;
    }   else {
        char[] encrypt = password.toCharArray();

        for (int i = 0; i < encrypt.length; i++)    {
            encrypt[i] = (char) (encrypt[i]);
        }
        return String.valueOf(encrypt);
    }
}

String decrypt (String password)    {
    if (password.length()<minLength)    {
        return password;
    }   else {
        char[] decrypt = password.toCharArray();
        for (int i = 0; i < decrypt.length; i++) {
            decrypt[i] = (char) (decrypt[i]);
        }
        return String.valueOf(decrypt);
    }
}

boolean isValidLength (String password) {
    if (password.length()<minLength)    {
        return true;

    }   else    {
        return false;
    }
}

int getMinLength(){
    return minLength;
    }
 }

パスワードを暗号化するとします (ドライバーはまだ作成されていません) が、変数 (暗号化と復号化) を正しく使用したかどうかはわかりません。Encrypt 変数と Decrypt 変数は、パスワードがインデックスをユーザーが入力したものに変更するためのものであり、またわかりませんが、どこかで逆置換法を使用すると想定されていますが、どこかわかりませんか? 何か助けはありますか?私のプログラムが途方に暮れているのか、それとも近いのかを教えてくれる人が必要です。

4

1 に答える 1

2

警告 - これは良い警告です -シャドーイングが原因です

この線:

char[] encrypt = password.toCharArray();

[静的]メンバー変数[これも] 呼び出さencryptれて、そのメソッド内でシャドウされます。したがって、「順列値」は決して使用されず、使用されるアルゴリズムはひどく壊れます。(「順列値」は暗号化と復号化で同じではないため、恐ろしく壊れます。[同じ]「順列値」を使用していないため、復号化アルゴリズムには別の問題がありますが、それは解決する別のことです.)

ソリューション:

  1. より良い/異なる名前を使用encryptionKeyしてください(順列など)。
  2. Encryption.encrypt[静的]メンバー変数を参照するために明示的に使用します。

そしてもちろん、アルゴリズムを見直してください。保持する必要はありませんEncryption.decrypt。保持すると、他のエラーが発生する可能性があります。

ハッピーコーディング。

于 2012-05-10T00:59:55.043 に答える