14

Spring 3.1およびHibernate 4.0.1でJasypt-1.9.0を使用しています。アプリケーション内のプロパティ ファイルに暗号化された形式でパスワード (ルート) が格納されているデータベースに接続する必要があります。

私はオンラインで見て、次のリンクで方法を見つけました:

  1. http://www.jasypt.org/spring31.html

  2. http://www.jasypt.org/hibernate.html

  3. http://www.jasypt.org/encrypting-configuration.html

要件に合わせて、次の手順と構成を実行しました。

  • ビルド パスにjasypt-1.9.0jasypt-hibernate4 -1.9.0 を追加しました。
  • 私のディスパッチャーサーブレットファイルに以下を追加しました:
< bean id="propertyConfigurer"
   class="org.jasypt.spring31.properties.EncryptablePropertyPlaceholderConfigurer">

  < constructor-arg ref="configurationEncryptor" />
  < property name="locations">
    < list>
      < value>classpath:database.properties< /value>
    < /list>
  < /property>
< /bean>

< bean id="configurationEncryptor"
    class="org.jasypt.encryption.pbe.StandardPBEStringEncryptor">
  < property name="config" ref="environmentVariablesConfiguration" />
< /bean>

< bean id="environmentVariablesConfiguration"
    class="org.jasypt.encryption.pbe.config.EnvironmentStringPBEConfig">
  < property name="algorithm" value="PBEWithMD5AndDES" />
  < property name="passwordEnvName" value="APP_ENCRYPTION_PASSWORD" />
</bean>
  • Jasypt 1.9.0 の CLI ツールを使用して、以下のパスワードを生成しました (添付の CLI のスナップショット)。

ここに画像の説明を入力- rootとしての値を持つAPP_ENCRYPTION_PASSWORD として新しい環境変数を追加しました

  • database.properties ファイルに暗号化されたパスワードを追加しました
db.driverClassName=com.mysql.jdbc.Driver
db.url=jdbc:mysql://localhost:3306/db1
db.username=root
db.password=ENC(bmfeQmgP/hJrh+mj6NANKA==)

ここで、アプリケーションを実行すると、次の例外が表示されます。

org.jasypt.exceptions.EncryptionOperationNotPossibleException
    at org.jasypt.encryption.pbe.StandardPBEByteEncryptor.decrypt(StandardPBEByteEncryptor.java:981)
    at org.jasypt.encryption.pbe.StandardPBEStringEncryptor.decrypt(StandardPBEStringEncryptor.java:725)
    at org.jasypt.properties.PropertyValueEncryptionUtils.decrypt(PropertyValueEncryptionUtils.java:72)
4

5 に答える 5

20

質問はおそらく時代遅れですが、将来のシーカーのために... EncryptionOperationNotPossibleException は、他の可能な例外をマスクするために jasypt によってスローされる一般的な例外です。この例外は、次の場合に発生する可能性があります。

  • jdk に JCE 無制限の強度がインストールされていない (最も一般的なケース)
  • 以前に他のパスワードで暗号化されたデータがデータベースにありました
  • 以前に暗号化されていなかったデータベースにいくつかのデータがあり、いくつかのフィールドに暗号化を追加しました
  • データの奇妙な破損のため、jasypt は db から暗号化された値を復号化できませんでした
  • 他の多くの場合、本当の原因を見つけるためにデバッグする必要があります..
于 2014-07-29T07:57:10.543 に答える