11

Jasypt 暗号化ライブラリを使用して、一部のテキストを暗号化/復号化しています。このコードは WAR ファイルに埋め込まれ、サーバーにデプロイされます。

ローカルで実行している場合、および単体テストでは、暗号化/復号化サイクルは完全に機能します。アプリケーションの開発には Jetty を使用しています。コードはそのサーバーで完全に機能します。何らかの理由で、Tomcat にデプロイすると、次の例外が発生します。

参考までに、ローカル環境とサーバー環境の両方に強力な暗号化ライブラリをインストールしており、最新の 1.6 バージョン (パッチ レベル 25) を使用しています。

org.jasypt.exceptions.EncryptionOperationNotPossibleException

例外にはメッセージがありません。

コードは完全に対称です。検証用にここに貼り付けました。関連するビットは次のとおりです。

ユーザーが非常によく似た問題を抱えていた古い Nabble の投稿を見つけました。コードは、Tomcat 内を除いてどこでも機能しました。解決策はありませんでした。

どんな洞察も大歓迎です。

**更新: ** ローカル システムの Tomcat で実行すると、動作するようです。だから私のサーバーについて何かがあります。サーバーでは、Windows Server 2008 で 64 ビット JVM を使用しています。ローカルでは 32 ビット JVM を使用しています (システムが少し古いため)。これがこの問題と関係があるのだろうか。

public void initializeService() {
    binaryEncryptor = new BasicBinaryEncryptor();
    binaryEncryptor.setPassword(keyBase64);
}

@Override
public <T extends Serializable> String simpleEncrypt(T objectToEncrypt) throws EncryptionException {
    ByteArrayOutputStream bos = new ByteArrayOutputStream();
    try {
        ObjectOutputStream oos = new ObjectOutputStream(bos);
        oos.writeObject(objectToEncrypt);

        byte[] bytes = binaryEncryptor.encrypt(bos.toByteArray());
        return new String(Base64.encodeBase64(bytes));
    } catch (IOException e) {
        LOGGER.error("failed to encrypt String: " + e.getMessage());
        throw new EncryptionException(e.getMessage(), e);
    } catch (Exception e) {
        LOGGER.error("failed to encrypt String: " + e.getMessage());
        throw new EncryptionException(e.getMessage(), e);
    }
};

@SuppressWarnings("unchecked")
@Override
public <T> T simpleDecrypt(String objectToDecrypt) throws EncryptionException {
    try {
        byte[] bytes = Base64.decodeBase64(objectToDecrypt);
        byte[] decryptedBytes = binaryEncryptor.decrypt(bytes);

        ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(decryptedBytes));
        T object = (T)ois.readObject();
        return object;
    } catch (IOException e) {
        LOGGER.error("failed to decrypt String: '" + objectToDecrypt + "', mesage = " + e.getMessage());
        throw new EncryptionException(e.getMessage(), e);
    } catch (Exception e) {
        LOGGER.error("failed to decrypt String: '" + objectToDecrypt + "', mesage = " + e.getMessage());
        throw new EncryptionException(e.getMessage(), e);
    }
}
4

3 に答える 3

5

ドキュメントへのリンクは次のとおりです

  • 暗号化と復号化の設定は同じですか
  • テーブルの列が十分な大きさであることを確認してください
  • Base64 エンコーディングと urlencoding は競合する可能性があるため、正しく行う必要があります。
于 2011-05-25T12:46:09.647 に答える
1

同様の問題に直面しました。私にとっては、復号化メカニズムを使用して復号化できなかったパスワードを復号化しようとしていたためです。

したがって、復号化メソッドが復号化を試みる前に、パスワードを暗号化してデータベースに保存しました。

誰かの役に立てば幸いです。

于 2014-06-27T13:07:13.357 に答える