10

アルゴリズムを使用Bouncy Castleしてデータを暗号化するために使用するアプリケーションがあります。PBEWITHSHA256AND128BITAES-CBC-BC実行中は正常にUbuntu動作しOpenJDK 1.7ます。しかし、それをRedHat 6.4running にも移動するとOpenJDK 1.7、次の例外が発生します。

java.security.NoSuchAlgorithmException

これを引き起こしている可能性のあるものについての考え。PBEWITHSHA256AND128BITAES-CBC-BCにアルゴリズムを追加するにはどうすればよいRedHat 6.4ですか?

psアプリケーションはで実行されていJBossます。

private String cryptoAlgorithm = "PBEWITHSHA256AND128BITAES-CBC-BC";

Security.addProvider(new BouncyCastleProvider());

// load passPhrase from configured external file to char array.
char[] passPhrase = null;
try {
    passPhrase = loadPassPhrase(passPhraseFile);
} catch (FileNotFoundException e) {
    throw BeanHelper.logException(LOG, methodName, new EJBException("The file not found: " + passPhraseFile, e));
} catch (IOException e) {
    throw BeanHelper.logException(LOG, methodName, new EJBException("Error in reading file: " + passPhraseFile, e));
}

PBEKeySpec pbeKeySpec = new PBEKeySpec(passPhrase);

try {
    SecretKeyFactory secretKeyFactory = SecretKeyFactory.getInstance(cryptoAlgorithm);
    SecretKey newSecretKey = secretKeyFactory.generateSecret(pbeKeySpec);
    return newSecretKey;
} catch (NoSuchAlgorithmException e) {
    throw BeanHelper.logException(LOG, methodName, new EJBException("The algorithm is not found: " + cryptoAlgorithm, e));
} catch (InvalidKeySpecException e) {
    throw BeanHelper.logException(LOG, methodName, new EJBException("The key spec is invalid", e));
}

( RH 6.4 の場合)

#java -version
java version "1.7.0_19"
OpenJDK Runtime Environment (rhel-2.3.9.1.el6_4-x86_64)
OpenJDK 64-Bit Server VM (build 23.7-b01, mixed mode)

( Ubuntu 12.04 の場合)

#java version "1.7.0_15"
OpenJDK Runtime Environment (IcedTea7 2.3.7) (7u15-2.3.7-0ubuntu1~12.04)
OpenJDK 64-Bit Server VM (build 23.7-b01, mixed mode)
4

3 に答える 3

5

クラスパスに BouncyCastle プロバイダーの JAR (例: bcprov-jdk15on-149.jar) がありますか?

最小限の CentOS 6.4 (64 ビット) インストール、OpenJDK 1.7 および BouncyCastle 1.49 でシナリオをテストしましたが、問題は見つかりませんでした。

JAR を JRE lib/ext ディレクトリに配置しました。

/usr/lib/jvm/java-1.7.0-openjdk.x86_64/jre/lib/ext
于 2013-06-09T04:00:59.180 に答える
2

あなたの問題を確認しようとしましたが、あなたの環境に問題があるようです。これは、クリーンな OpenJDK 1.7、1.6、Oracle JDK 1.7 および 1.6 で正常に実行されたコードのサンプルです。

$ java -version
java version "1.7.0_19"
OpenJDK Runtime Environment (rhel-2.3.9.1.el6_4-x86_64)
OpenJDK 64-Bit Server VM (build 23.7-b01, mixed mode):

コマンドライン:java -cp bcprov-jdk15on-149.jar:. Test

出力:OK

import org.bouncycastle.jce.provider.BouncyCastleProvider;

import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.PBEKeySpec;
import java.security.NoSuchAlgorithmException;
import java.security.Security;
import java.security.spec.InvalidKeySpecException;

public class Test {
    public static void main(String[] args) throws Exception{
        String cryptoAlgorithm = "PBEWITHSHA256AND128BITAES-CBC-BC";
        Security.addProvider(new BouncyCastleProvider());

        char[] passPhrase = null;
        passPhrase = "12321".toCharArray();
        PBEKeySpec pbeKeySpec = new PBEKeySpec(passPhrase);
        try {
            SecretKeyFactory secretKeyFactory = SecretKeyFactory.getInstance(cryptoAlgorithm, "BC");
            SecretKey newSecretKey = secretKeyFactory.generateSecret(pbeKeySpec);
            assert newSecretKey != null;
            System.out.println("OK");
        } catch (NoSuchAlgorithmException e) {
            System.out.println("The algorithm is not found: " + cryptoAlgorithm);
        } catch (InvalidKeySpecException e) {
            System.out.println("The key spec is invalid");
        }
    }
}

あなたの環境でそのプログラムを実行してみてください。ここからダウンロードできる BouncyCastle jar http://downloads.bouncycastle.org/java/bcprov-jdk15on-149.jar

于 2013-06-07T12:43:27.350 に答える
0



セキュリティ プロバイダーの順序は、両方の環境で異なると思います。

for (Provider provider : Security.getProviders())
{
    System.out.println("Name: " + provider.getName() + " Version: " + provider.getVersion());
}

一連のプロバイダーの特定の位置に弾む城のプロバイダーを挿入してみることができます。たとえば、最初の位置では、他のセキュリティ プロバイダが使用されていなければ、問題は発生しません。

Security.insertProviderAt(new BouncyCastleProvider(), 1);

アルゴリズムに特定のプロバイダーを使用することはお勧めしません

SecretKeyFactory.getInstance(cryptoAlgorithm, provider)

参照: Java ™ 暗号化アーキテクチャ (JCA) リファレンス ガイド

于 2013-06-04T11:05:56.663 に答える