2015-05-16 35 views
8

Ich versuche Jasypt mit Bouncy Castle crypro bietet (128Bit AES) in einer Spring-Anwendung zu entschlüsseln Entity-Eigenschaften, während sie mit Hibernate zu speichern. Aber ich bekomme immer diese org.jasypt.exceptions.EncryptionOperationNotPossibleException, wenn Sie versuchen, die entry zu speichern.EncryptionOperationNotPossibleException von Jasypt mit Bouncy Castle

org.jasypt.exceptions.EncryptionOperationNotPossibleException 
    Encryption raised an exception. A possible cause is you are using strong encryption 
    algorithms and you have not installed the Java Cryptography Extension (JCE) Unlimited 
    Strength Jurisdiction Policy Files in this Java Virtual Machine 
at org.jasypt.encryption.pbe.StandardPBEByteEncryptor.handleInvalidKeyException(StandardPBEByteEncryptor.java:1073) 
at org.jasypt.encryption.pbe.StandardPBEByteEncryptor.encrypt(StandardPBEByteEncryptor.java:924) 
at org.jasypt.encryption.pbe.StandardPBEStringEncryptor.encrypt(StandardPBEStringEncryptor.java:642) 
at org.jasypt.hibernate4.type.AbstractEncryptedAsStringType.nullSafeSet(AbstractEncryptedAsStringType.java:155) 
at org.hibernate.type.CustomType.nullSafeSet(CustomType.java:158) 

(voller stacktrace unten)

Ich benutze Java Cryptography Extension (JCE) nicht, das ist, warum ich versuche Bouncy Castle

zu verwenden, ich denke, es ist etwas falsch mit der Feder Konfiguration, findet jemand das Problem?

Meine Feder-Konfiguration ist:

<bean id="bouncyCastleProvider" class="org.bouncycastle.jce.provider.BouncyCastleProvider"/> 
<bean class="org.jasypt.hibernate4.encryptor.HibernatePBEStringEncryptor" depends-on="bouncyCastleProvider"> 

    <property name="provider" ref="bouncyCastleProvider"/> 
    <property name="providerName" value="BC"/> 

    <property name="saltGenerator"> 
     <bean class="org.jasypt.salt.RandomSaltGenerator"/> 
    </property> 

    <property name="registeredName" value="STRING_ENCRYPTOR"/>  
    <property name="algorithm" value="PBEWITHSHA256AND128BITAES-CBC-BC"/> 
    <property name="password" value="sEcRET1234"/> 
</bean> 

Verbrauch:

@Entity 
@TypeDef(name = "encryptedString", typeClass = EncryptedStringType.class, parameters = { @Parameter(name = "encryptorRegisteredName", value = "STRING_ENCRYPTOR") }) 
public class SubscriptionProcess { 
    ...  
    @Type(type = "encryptedString") 
    private String debitAccountIban; 
    ... 
} 

pom/dependenies

<dependency> 
     <groupId>org.jasypt</groupId> 
     <artifactId>jasypt</artifactId> 
     <version>1.9.2</version> 
    </dependency> 
    <dependency> 
     <groupId>org.jasypt</groupId> 
     <artifactId>jasypt-hibernate4</artifactId> 
     <version>1.9.2</version> 
    </dependency> 
... 
    <dependency> 
     <groupId>org.bouncycastle</groupId> 
     <!-- I use an older version of bouncy castle that is also used by tika --> 
     <artifactId>bcprov-jdk15</artifactId>   
     <version>1.45</version> 
    </dependency> 
    <dependency> 
     <groupId>org.bouncycastle</groupId> 
     <artifactId>bcmail-jdk15</artifactId>   
     <version>1.45</version> 
    </dependency> 

Voll Stack Trace

org.jasypt.exceptions.EncryptionOperationNotPossibleException: Encryption raised an exception. A possible cause is you are using strong encryption algorithms and you have not installed the Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files in this Java Virtual Machine 
    at org.jasypt.encryption.pbe.StandardPBEByteEncryptor.handleInvalidKeyException(StandardPBEByteEncryptor.java:1073) 
    at org.jasypt.encryption.pbe.StandardPBEByteEncryptor.encrypt(StandardPBEByteEncryptor.java:924) 
    at org.jasypt.encryption.pbe.StandardPBEStringEncryptor.encrypt(StandardPBEStringEncryptor.java:642) 
    at org.jasypt.hibernate4.type.AbstractEncryptedAsStringType.nullSafeSet(AbstractEncryptedAsStringType.java:155) 
    at org.hibernate.type.CustomType.nullSafeSet(CustomType.java:158) 
    at org.hibernate.persister.entity.AbstractEntityPersister.dehydrate(AbstractEntityPersister.java:2843) 
    at org.hibernate.persister.entity.AbstractEntityPersister.dehydrate(AbstractEntityPersister.java:2818) 
    at org.hibernate.persister.entity.AbstractEntityPersister$4.bindValues(AbstractEntityPersister.java:3025) 
    at org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:57) 
    at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:3032) 
    at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:3556) 
    at org.hibernate.action.internal.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:97) 
    at org.hibernate.engine.spi.ActionQueue.execute(ActionQueue.java:480) 
    at org.hibernate.engine.spi.ActionQueue.addResolvedEntityInsertAction(ActionQueue.java:191) 
    at org.hibernate.engine.spi.ActionQueue.addInsertAction(ActionQueue.java:175) 
    at org.hibernate.engine.spi.ActionQueue.addAction(ActionQueue.java:210) 
    at org.hibernate.event.internal.AbstractSaveEventListener.addInsertAction(AbstractSaveEventListener.java:324) 
    at org.hibernate.event.internal.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:288) 
    at org.hibernate.event.internal.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:194) 
    at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:125) 
    at org.hibernate.jpa.event.internal.core.JpaPersistEventListener.saveWithGeneratedId(JpaPersistEventListener.java:84) 
    at org.hibernate.event.internal.DefaultPersistEventListener.entityIsTransient(DefaultPersistEventListener.java:206) 
    at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:149) 
    at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:75) 
    at org.hibernate.internal.SessionImpl.firePersist(SessionImpl.java:807) 
    at org.hibernate.internal.SessionImpl.persist(SessionImpl.java:780) 
    at org.hibernate.internal.SessionImpl.persist(SessionImpl.java:785) 
    at org.hibernate.jpa.spi.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:1181) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:606) 
    at org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:291) 
    at com.sun.proxy.$Proxy78.persist(Unknown Source) 
    at com.demo.base.user.BaseUserDomainCreatorUtil$Persistent.postCreate(BaseUserDomainCreatorUtil.java:424) 
    at com.demo.base.user.BaseUserDomainCreatorUtil.createSafeCustodyAccount(BaseUserDomainCreatorUtil.java:321) 
    at com.demo.base.user.BaseUserDomainCreatorUtil.createSafeCustodyAccount(BaseUserDomainCreatorUtil.java:329) 
    at com.demo.base.user.BaseUserDomainCreatorUtil.createSafeCustodyAccount(BaseUserDomainCreatorUtil.java:333) 
    at com.demo.base.user.BaseUserDomainCreatorUtil.createUserWithSafeCustodyAccount(BaseUserDomainCreatorUtil.java:128) 
    at com.demo.app.asset.AssetTestScenario.<init>(AssetTestScenario.java:66) 
    at com.demo.app.asset.dao.SubscriptionProcessDaoSpringTest.testPersistence_aroundBody0(SubscriptionProcessDaoSpringTest.java:62) 
    at com.demo.app.asset.dao.SubscriptionProcessDaoSpringTest$AjcClosure1.run(SubscriptionProcessDaoSpringTest.java:1) 
    at org.springframework.transaction.aspectj.AbstractTransactionAspect.ajc$around$org_springframework_transaction_aspectj_AbstractTransactionAspect$1$2a73e96cproceed(AbstractTransactionAspect.aj:60) 
    at org.springframework.transaction.aspectj.AbstractTransactionAspect$AbstractTransactionAspect$1.proceedWithInvocation(AbstractTransactionAspect.aj:66) 
    at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:267) 
    at org.springframework.transaction.aspectj.AbstractTransactionAspect.ajc$around$org_springframework_transaction_aspectj_AbstractTransactionAspect$1$2a73e96c(AbstractTransactionAspect.aj:64) 
    at com.demo.app.asset.dao.SubscriptionProcessDaoSpringTest.testPersistence(SubscriptionProcessDaoSpringTest.java:61) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:606) 
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47) 
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) 
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44) 
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) 
    at org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:73) 
    at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:82) 
    at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:73) 
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271) 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:217) 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:83) 
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238) 
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63) 
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236) 
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53) 
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229) 
    at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) 
    at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:68) 
    at org.junit.runners.ParentRunner.run(ParentRunner.java:309) 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:163) 
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50) 
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197) 

Antwort

22

Jasypt ausgelegt ist mit JCE providers verwendet werden, dass die Terminologie dieses Projekt auf seiner Web verwendet, kann man etwas verwirrend sein, da der Satz folgen ist:

Open API für die Verwendung mit jedem Provider JCE, und nicht nur das Standard Java VM eins. Jasypt kann leicht mit bekannten Anbietern wie Hüpfburg

Von diesem Satz verwendet werden vielleicht Sie verstehen, dass Jasypt mit JCE verwendet werden kann, oder mit BouncyCastle wie beide arbeiten anders oder so ähnlich; Was dieser Satz jedoch bedeutet, ist, dass es viele JCE providers, Standard-Provider gibt, die mit Standard-Java-Installation und nicht-Standard-Versionen kommen, aber beide erreichen die JCA/JCE specification und beide können mit Jasypt arbeiten.

Wie gesagt BouncyCastle ein JCE provider hat, von der bouncycastle Sie sehen:

Ein Anbieter für die Java Cryptography Extension und der Java Cryptography Architecture.

Also, wenn Sie versuchen, zu verschlüsseln machen/Operationen entschlüsseln org.bouncycastle.jce.provider.BouncyCastleProvider als Anbieter verwenden Sie die gleichen Einschränkungen haben, dass alle JCE Provider haben, was die verfügbaren Algorithmen und Schlüssellänge.

Um diese Einschränkungen bezüglich Schlüssellänge und Algorithmen zu vermeiden und die Fehler zu übergeben, müssen Sie Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files für Ihre jvm-Version installieren.

Zum Beispiel für Java 1.7 können Sie die Dateien von here herunterladen.Kopieren Sie dann die JAR-Dateien in $ JAVA_HOME \ jre \ lib \ security und überschreiben Sie die vorhandenen Zeichen local_policy.jar und US_export_policy.jar.

Hoffe, das hilft.

Verwandte Themen