Jasypt暗号化ライブラリを使用してテキストを暗号化/復号化します。このコードはWARファイルに埋め込まれ、サーバーにデプロイされます。
ローカルで実行する場合、および単体テストでは、暗号化/復号化サイクルは完全に機能します。 Jettyを使用してアプリケーションを開発しています。コードはそのサーバーで完全に機能します。何らかの理由で、Tomcatにデプロイすると、次の例外を除いて、Tomcatが機能しなくなります。
参考までに、ローカル環境とサーバー環境の両方に強力な暗号化ライブラリをインストールしており、最新の1.6バージョン(パッチレベル25)を使用しています。
org.jasypt.exceptions.EncryptionOperationNotPossibleException
例外にはメッセージがありません。
コードは完全に対称的です。検査のためにここに貼り付けました。関連するビットは次のとおりです。
私は1つを見つけました 古い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);
}
}
ドキュメントへのリンクは次のとおりです。 http://www.jasypt.org/faq.html#i-keep-on-receiveing-encryption-operation-not-possible
@biniam_Ethiopia
私はあなたの答えにコメントしたでしょうが、私は十分な評判がないので、私は自分の答えを書きます:
非常によく似た問題がありましたが、私の場合は暗号化アルゴリズムを変更したため(PBEWithMD5AndTripleDES)、データベース内のエントリは以前は別のエントリで保存されていました(PBEWithMD5AndDES =)。そのため、EncryptionOperationNotPossibleExceptionも発生しました。これは、上記の@NathanFegerのコメントのために情報がありません。
これがいつか誰かにも役立つことを願っています;)
私も同様の問題に直面しました。私にとっては、復号化メカニズムを使用して復号化できなかったパスワードを復号化しようとしたためです。
したがって、I パスワードを暗号化してデータベースに保存復号化メソッドがパスワードを復号化しようとする前に。
私はそれが誰かを助けることを願っています。