2016-11-02 20 views
0

PBEWITHHMACSHA256ANDAES_256アルゴリズムをJava8のSunJCE providerから使いたいと思います。JCEのPBEWITHHMACSHA256ANDAES_256アルゴリズムの使用方法

jarのように見えますが、configのすべてがJava8のすぐに使用できますが、PBEWITHHMACSHA256ANDAES_256アルゴリズムを使用することはできません。

は、私は、これら二つのjarファイルを持っている:私、私は配列でcom.sun.crypto.provider.SunJCEを見ることができますjdk1.8.0_40\jre\lib\security\java.policy

grant codeBase "file:${{java.ext.dirs}}/*" { 
    permission java.security.AllPermission; 
}; 

でこのエントリがありますjdk1.8.0_40\jre\lib\security\java.security

security.provider.5=com.sun.crypto.provider.SunJCE 

でこのエントリがあります

jdk1.8.0_40\jre\lib\jce.jar 
jdk1.8.0_40\jre\lib\ext\sunjce_provider.jar 

Security.getProviders()

しかし、次のコードは、EncryptionOperationNotPossibleException

import org.jasypt.encryption.pbe.StandardPBEStringEncryptor; 
import org.jasypt.encryption.pbe.config.SimpleStringPBEConfig; 
import org.jasypt.exceptions.EncryptionOperationNotPossibleException; 
import org.junit.Assert; 
import org.junit.Test; 

public class EncryptionTest { 
    @Test 
    public void test() { 
     SimpleStringPBEConfig pbeConfig = new SimpleStringPBEConfig(); 
     pbeConfig.setAlgorithm("PBEWITHHMACSHA256ANDAES_256"); 
     pbeConfig.setPassword("changeme"); 
     StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor(); 
     encryptor.setConfig(pbeConfig); 

     String encrypted = encryptor.encrypt("foo"); 
     String decrypted = encryptor.decrypt(encrypted); 
     Assert.assertEquals("foo", decrypted); 
    } 
} 

例外

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:999) 
    at org.jasypt.encryption.pbe.StandardPBEByteEncryptor.encrypt(StandardPBEByteEncryptor.java:868) 
    at org.jasypt.encryption.pbe.StandardPBEStringEncryptor.encrypt(StandardPBEStringEncryptor.java:642) 
    at foo.bar.EncryptionTest.test(EncryptionTest.java:40) 

PBEWITHHMACSHA256ANDAES_256がEncryptionOperationNotPossibleExceptionを投げている理由を任意のアイデアを投げますか?

答えて

2

例外が言及:

暗号化で例外が発生しました。考えられる原因は、あなたが強力な暗号化アルゴリズムを使用していて、この答えは唯一その問題を解決しようとすると、このJava仮想マシンに

をJava Cryptography Extension(JCE)無制限強度の管轄ポリシーファイルをインストールしていないです。これらはまったく違うので、私はanother answerと書いて、次の問題を解決しました。

あなたが許可している国に住んでいる場合は、Oracle's websiteからダウンロードできます。

これらの無制限強度パッケージをインストールするには、$JAVA_HOME/jre/lib/security/フォルダに移動します(JDKがある場合)。

そこで、local_policy.jarUS_export_policy.jarをバックアップしてください。

これで、そのフォルダにダウンロードしたzipファイルからlocal_policy.jarUS_export_policy.jarファイルを解凍し、アプリケーションを再起動します。あなたのアプリケーションは、無制限のJCE能力にアクセスできるようになりました。

何か問題が生じた場合は、2つのファイルをバックアップバージョンに戻します。

このコードを実行する必要がある各JVMは、このように「パッチ適用」する必要があります。

+0

これにより、すべての開発者は自分のjreをカスタマイズする必要があり、すべてのサーバーでjreを変更する必要があります。実行時にこれを行うことができる動的なソリューションはありますか? –

+0

いいえこれは、Javaの輸出ルールが米国から知られている制限です。これをJavaのインストールの追加ステップとみなして文書化する必要があります。これを忘れるのは本当に簡単です。これを簡単にするには、スクリプトと2つのjarファイルを各開発者に提供して、適切に実行するようにします。しかし、まず、Java 8のJDK/JREを(例えば、$ JAVA_HOME/bin/java -version'を実行して)実行することを確認してください。 Java 7 JDKまたはJREにインストールすると、JDKが破損します。 –

+0

本当の選択肢ですが、独自のプロバイダで自分でアルゴリズムを実装することもできます。私はそれに対して*強くお勧めします。あなたのプロフィールには、あなたが英国に住んでいると言われています。あなたは通常、そのパッケージに合法的にアクセスし、それを使用する必要があります。 –

1

もう1つ答えを返信していますが、最後の回答以来進んでいるようです。問題はやや異なっていますが、別の答えを得るには十分です。

あなたが言うように、今は空の例外メッセージを「ただ」得るだけです。

この問題は、アルゴリズムに存在するようです。PBEWITHHMACSHA256ANDAES_256を使用すると常に例外がスローされます。

これは、AESが余分なパラメータ、すなわちIVを必要とするためです。私はIV are not supported by Jasyptを見つけました。

さらに特定のアルゴリズムを使用する場合は、Jasyptを使用せずに手動で実装することをおすすめします。実装は上記のリンクにあります。

関連する問題