3

パスワードの暗号化と復号化のために、アプリで以下のコードを使用していました。突然失敗することに気付くまで、正常に動作していました。私が覚えている唯一の変更は、数日前にADTとEclipseを最新バージョンに更新することです。なぜそれが今失敗しているのか分かりません。新しい暗号化を作成すると機能します。しかし、以前に生成された暗号化されたパスワードを使用し、それを以下のコードに渡して復号化すると、エラーが発生します。「byte[] plainBytes = cipher.doFinal(cipherBytes);」という行で失敗しています。

以下の私の復号化コード

        String keyword  = "keyword";
        int iterationCount = 1000; 
        int keyLength = 256;
        String[] fields = encryptedPassword.split("]");
        byte[] salt = fromBase64(fields[0]);
        byte[] cipherBytes = fromBase64(fields[1]);
        KeySpec keySpec = new PBEKeySpec(keyword.toCharArray(), salt, iterationCount, keyLength);
        SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("PBEWITHSHA256AND256BITAES-CBC-BC");
        SecretKey key = keyFactory.generateSecret(keySpec);
        Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
        PBEParameterSpec pbeSpec = new PBEParameterSpec(salt, iterationCount);
        cipher.init(Cipher.DECRYPT_MODE, key, pbeSpec);
        byte[] plainBytes = cipher.doFinal(cipherBytes);
        plainStr = new String(plainBytes, "UTF-8").trim();
        return plainStr;

私が得ているエラーは以下のとおりです

java.lang.RuntimeException: javax.crypto.BadPaddingException: error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt

誰でもここで助けてもらえますか

4

2 に答える 2

0

問題が何であるかを理解しました。jdk のバージョンを 1.6 から 1.7 に更新しました。それが犯人でした。私は javax.crypto クラスを使用しているため、バージョンが変更されると、暗号化もわずかに変更されました。

于 2013-10-07T20:39:05.923 に答える