2015-05-16 22 views
8

Tôi cố gắng sử dụng Jasypt với Bouncy Castle crypro cung cấp (128Bit AES) trong ứng dụng Spring để giải mã các thuộc tính thực thể trong khi lưu chúng với Hibernate. Nhưng tôi luôn luôn nhận được điều này org.jasypt.exceptions.EncryptionOperationNotPossibleException khi cố gắng để tiết kiệm sự chính trực.EncryptionOperationNotPossibleException bởi Jasypt với Lâu đài Bouncy

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) 

(đầy đủ stacktrace dưới đây)

tôi không sử dụng Java Cryptography Extension (JCE), đó là lý do tại sao tôi cố gắng sử dụng Bouncy Castle

Tôi nghĩ có cái gì đó sai trái với mùa xuân cấu hình, không ai tìm thấy vấn đề?

Cấu hình mùa xuân của tôi là:

<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> 

Cách sử dụng:

@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> 

Full 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) 

Trả lời

22

Jasypt được thiết kế để sử dụng với JCE providers, thuật ngữ rằng dự án này sử dụng trên web của nó có thể gây nhầm lẫn bạn vì không câu sau:

mở API để sử dụng với bất kỳ nhà cung cấp JCE, và không chỉ máy ảo Java mặc định. Jasypt có thể dễ dàng sử dụng với các nhà cung cấp nổi tiếng như Bouncy Castle

Từ câu này có thể bạn đang hiểu rằng Jasypt có thể được sử dụng với JCE hoặc với BouncyCastle như cả hai đang làm việc khác hoặc một cái gì đó như thế; Tuy nhiên, ý nghĩa của câu này là có nhiều JCE providers, nhà cung cấp mặc định đi kèm với cài đặt mặc định java và không mặc định, tuy nhiên cả hai đều hoàn thành JCA/JCE specification và cả hai có thể làm việc với Jasypt.

Như tôi đã nói BouncyCastle có JCE provider, từ bouncycastle bạn có thể thấy:

Một nhà cung cấp cho Cryptography Extension Java và Java Cryptography Architecture .

Vì vậy, nếu bạn đang cố gắng để làm cho mã hóa/giải mã hoạt động sử dụng org.bouncycastle.jce.provider.BouncyCastleProvider là nhà cung cấp bạn đã có những hạn chế tương tự mà tất cả các nhà cung cấp JCE có, liên quan đến các thuật toán có sẵn và thời gian then chốt.

Để tránh những hạn chế này về độ dài và thuật toán chính và để vượt qua các lỗi bạn có, bạn phải cài đặt Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files cho phiên bản jvm của bạn.

Ví dụ cho java 1.7 bạn có thể tải xuống các tệp từ here.Và sau đó sao chép các lọ bằng $ JAVA_HOME \ jre \ lib \ security ghi đè lên số local_policy.jarUS_export_policy.jar hiện tại.

Hy vọng điều này sẽ hữu ích.

Các vấn đề liên quan