0

パスワードを暗号化するために利用するコードを見つけました。java.security.*しかし、私がそれを使用すると、うまくいきません。encrypt()同じパラメーター (メソッドに表示され、実際には毎回同じ) でencrypt メソッドを呼び出すたびに、異なる結果が得られます。もちろん、コードは役に立たなくなります。ここに私のコード:

public byte[] encrypt(String clearPassword, byte[] salt) throws NoSuchAlgorithmException, InvalidKeySpecException {
    System.out.println(clearPassword+"     **********     "+salt);
    String algorithm = "PBKDF2WithHmacSHA1";
    int derivedKeyLength = 1600;
    int iterations = 20000;

    KeySpec spec = new PBEKeySpec(clearPassword.toCharArray(), salt, iterations, derivedKeyLength);
    SecretKeyFactory f = SecretKeyFactory.getInstance(algorithm);
    byte [] truc = f.generateSecret(spec).getEncoded();
    System.out.println(truc);
    return truc;
}

public byte[] generateSalt() throws NoSuchAlgorithmException {
    SecureRandom random = SecureRandom.getInstance("SHA1PRNG");
    byte[] salt = new byte[8];
    random.nextBytes(salt);

    return salt;
}

ある時点で元のコードにエラーを導入したと思いますが、どこにあるのかわかりません。何か案が?

4

1 に答える 1

4

それSystem.out.println(truc);はあなたが思っていることをしないからです。あなたが試した場合:

System.out.println(Arrays.toString(truc));

配列の実際の内容を出力します。これは、同じパラメーターでメソッドを呼び出すたびに同じになるはずです。

例を参照してください:配列の印刷

于 2013-08-27T16:07:39.973 に答える