1

Java8 でSunJCE プロバイダーPBEWITHHMACSHA256ANDAES_256のアルゴリズムを使用したいと考えています。

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

私はこれらの2つの瓶を持っています:

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

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

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

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

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

com.sun.crypto.provider.SunJCE呼び出すと配列で見ることができます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 をスローしている理由はありますか?

4

2 に答える 2

3

例外は次のとおりです。

暗号化で例外が発生しました。考えられる原因は、強力な暗号化アルゴリズムを使用していて、この Java 仮想マシンに Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files をインストールしていないことです。

この回答は、その問題の修正のみを試みます。これらはまったく異なるため、次の問題に役立つ別の回答を書きました。

許可されている国に住んでいる場合は、Oracle の Web サイトからダウンロードできます。

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

local_policy.jarそこで、とをバックアップしますUS_export_policy.jar

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

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

このコードを実行する必要がある各 JVM には、この方法で「パッチを適用」する必要があることに注意してください。

于 2016-11-02T10:06:58.783 に答える
2

別の回答を書いて申し訳ありませんが、最後の回答から進歩したようです。問題は少し異なりますが、別の回答に値するのは十分です。

あなたが言うように、今は空の例外メッセージしか表示されません。

問題はアルゴリズムにあるようです: usingPBEWITHHMACSHA256ANDAES_256は常に例外をスローします。

これは、AES が追加のパラメーター、つまり IV を必要とするためです。IV はJasyptでサポートされていないことがわかりました。

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

于 2016-11-02T11:06:35.477 に答える