0

ユーザー名フィールドを暗号化/復号化する必要があり、以下のコードを使用する予定でした:

public class Decrypter {
    Cipher dcipher;

    byte[] salt = new String("12345678").getBytes();
    int iterationCount = 1024;
    int keyStrength = 256;
    SecretKey key;
    byte[] iv;

    Decrypter(String passPhrase) throws Exception {
        SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");
        KeySpec spec = new PBEKeySpec(passPhrase.toCharArray(), salt, iterationCount, keyStrength);
        SecretKey tmp = factory.generateSecret(spec);
        key = new SecretKeySpec(tmp.getEncoded(), "AES");
        dcipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
    }

    public String encrypt(String data) throws Exception {
        dcipher.init(Cipher.ENCRYPT_MODE, key);
        AlgorithmParameters params = dcipher.getParameters();
        iv = params.getParameterSpec(IvParameterSpec.class).getIV();
        byte[] utf8EncryptedData = dcipher.doFinal(data.getBytes());
        String base64EncryptedData = new sun.misc.BASE64Encoder().encodeBuffer(utf8EncryptedData);

        System.out.println("IV " + new sun.misc.BASE64Encoder().encodeBuffer(iv));
        System.out.println("Encrypted Data " + base64EncryptedData);
        return base64EncryptedData;
    }

    public String decrypt(String base64EncryptedData) throws Exception {
        dcipher.init(Cipher.DECRYPT_MODE, key, new IvParameterSpec(iv));
        byte[] decryptedData = new sun.misc.BASE64Decoder().decodeBuffer(base64EncryptedData);
        byte[] utf8 = dcipher.doFinal(decryptedData);
        return new String(utf8, "UTF8");
    }

    public static void main(String args[]) throws Exception {
        Decrypter decrypter = new Decrypter("ABCDEFGHIJKL");
        String encrypted = decrypter.encrypt("StringToBeEncrypted");
        String decrypted = decrypter.decrypt(encrypted);
        System.out.println(decrypted);
    }
} 

このコードは別のサイトから取得しました。上記のコードは、スタンドアロンとして実行すると正常に動作します。しかし、私が直面している問題は、ユーザー名が既に暗号化されている場合に値を解読する方法ですか?

さまざまなクラスから暗号化および復号化関数を呼び出すため、文字列が既に暗号化されて DB に保存されている場合、ユーザーが Web サイトにログインするときに復号化メソッドを呼び出すときに、IV を CBC モードとして渡すにはどうすればよいですか復号化にはIVパラメータが必要ですが、暗号化中にivを保存していませんか???

どんな助けでも大歓迎です!!

注: これは、パスワード保護とは関係ありません。前述のように、パスワードではなくユーザー ID を暗号化する必要があります。パスワード保護のために、ハッシュのみを使用しています。

4

2 に答える 2