GVKun编程网logo

bouncycastle + JBoss AS7:JCE无法验证提供者BC(无法进行验证)

11

本文将分享bouncycastle+JBossAS7:JCE无法验证提供者BC的详细内容,并且还将对无法进行验证进行详尽解释,此外,我们还将为大家带来关于BouncyCastle、Bouncycast

本文将分享bouncycastle + JBoss AS7:JCE无法验证提供者BC的详细内容,并且还将对无法进行验证进行详尽解释,此外,我们还将为大家带来关于BouncyCastle、Bouncycastle GOST 34.311 哈希与测试示例不同、bouncycastle.jce.provider、bouncycastle提供程序找不到算法所需的类的相关知识,希望对你有所帮助。

本文目录一览:

bouncycastle + JBoss AS7:JCE无法验证提供者BC(无法进行验证)

bouncycastle + JBoss AS7:JCE无法验证提供者BC(无法进行验证)

我在应用程序中使用BouncyCastle进行加密。当我独立运行它时,一切正常。但是,如果将其放在webapp中并部署在JBoss服务器上,则会出现以下错误:

javax.servlet.ServletException: error constructing MAC: java.security.NoSuchProviderException: JCE cannot authenticate the provider BC(...)root causejava.lang.Exception: error constructing MAC: java.security.NoSuchProviderException: JCE cannot authenticate the provider BC(...)root causejava.io.IOException: error constructing MAC: java.security.NoSuchProviderException: JCE cannot authenticate the provider BC    org.bouncycastle.jce.provider.JDKPKCS12KeyStore.engineLoad(Unknown Source)    java.security.KeyStore.load(Unknown Source)

这是导致此错误的代码的一部分:

    if (Security.getProvider(BouncyCastleProvider.PROVIDER_NAME) == null)    {        Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());    }    // Read the Private Key    KeyStore ks = KeyStore.getInstance("PKCS12", BouncyCastleProvider.PROVIDER_NAME);    ks.load(new FileInputStream(certificatePath), privateKeyPassword.toCharArray());

和Maven的依赖:

<dependency>    <groupId>bouncycastle</groupId>    <artifactId>bcmail-jdk16</artifactId>    <version>140</version></dependency>

你知道我该怎么部署吗?

答案1

小编典典

不要将充气城堡罐子部署为您的Web应用程序(WEB-INF / lib)的一部分。您当然需要在编译时使用此文件,但是在JBOSS上,它应该在此处:

$JBOSS_HOME/server/default/lib/

代替

yourapp/WEB-INF/lib

BouncyCastle

BouncyCastle

Bouncycstle 是一款开源的密码包,其包含了大量的密码算法,其支持椭圆曲线密码算法。

首先,我们必须把BouncyCastle提供的jar包放到classpath中。这个jar包就是bcprov-jdk15on-xxx.jar,可以从官方网站下载。

Java标准库的java.security包提供了一种标准机制,允许第三方提供商无缝接入。我们要使用BouncyCastle提供的RipeMD160算法,需要先把BouncyCastle注册一下:

public class TestDemo {
     public static void main(String[] args) throws Exception {
          // 注册BouncyCastle:
            Security.addProvider(new BouncyCastleProvider());
            // 按名称正常调用:
            MessageDigest md = MessageDigest.getInstance("RipeMD160");
            md.update("HelloWorld".getBytes("UTF-8"));
            byte[] result = md.digest();
            System.out.println(new BigInteger(1, result).toString(16));
        }
         
     
          
}

总结:

BouncyCastle是一个开源的第三方算法提供商;

BouncyCastle提供了很多Java标准库没有提供的哈希算法和加密算法;

使用第三方算法前需要通过Security.addProvider()注册。

Bouncycastle GOST 34.311 哈希与测试示例不同

Bouncycastle GOST 34.311 哈希与测试示例不同

如何解决Bouncycastle GOST 34.311 哈希与测试示例不同?

能否请您帮忙处理 bouncycastle 的哈希函数 GOST 34.311。不知何故,结果与测试向量不同。 维基说: "GOST("敏捷的棕色狐狸跳过懒狗") = 77b7fa410c9ac58a25f49bca7d0468c9296529315eaca76bd1a10f376d1f4294"

使用 Digest Gost 34.11 时:

var testString = "The quick brown fox jumps over the lazy dog";
var result = (new GOST3411.Digest()).digest(testString.getBytes());
var resHex2 = new BigInteger(1,result).toString(16);
assertEquals("77b7fa410c9ac58a25f49bca7d0468c9296529315eaca76bd1a10f376d1f4294",resHex2.toupperCase());

得到:

org.opentest4j.AssertionFailedError: 
Expected :77b7fa410c9ac58a25f49bca7d0468c9296529315eaca76bd1a10f376d1f4294
Actual   :9004294A361A508C586FE53D1F1B02746765E71B765472786E4770D565830A76

2012 版:

var testString = "The quick brown fox jumps over the lazy dog";
var result = (new GOST3411.Digest2012_256()).digest(testString.getBytes());
var resHex2 = new BigInteger(1,resHex2.toupperCase());

得到:

AssertionFailedError: 
Expected :77b7fa410c9ac58a25f49bca7d0468c9296529315eaca76bd1a10f376d1f4294
Actual   :3E7DEA7F2384B6C5A3D0E24AAA29C05E89DDD762145030EC22C71A6DB8B2C1F4

BouncyCastle 是否支持原始 GOST 34.311 - 95?什么是正确的计算方法?

解决方法

BC 正在使用标准的 GOST R 34.11-2012 (streebog) 版本

$ rhash -G -m "The quick brown fox jumps over the lazy dog"
3e7dea7f2384b6c5a3d0e24aaa29c05e89ddd762145030ec22c71a6db8b2c1f4  (message)

维基百科示例适用于已弃用的 GOST R 34.11-94 版本

$ rhash --gost94 -m "The quick brown fox jumps over the lazy dog"
77b7fa410c9ac58a25f49bca7d0468c9296529315eaca76bd1a10f376d1f4294  (message)

如果你真的想要旧的,你可能应该要求普通的 GOST3411Digest 而不是新的 GOST3411.Digest2012_256

bouncycastle.jce.provider

bouncycastle.jce.provider

我遇到了同样的问题,我可以用这个小代码来解决它。我希望这可以帮助某人 :) .

private static BouncyCastleProvider bouncycastleprovider = null;

public static synchronized BouncyCastleProvider getinstance () {

    if (bouncycastleprovider == null) {

        bouncycastleprovider = new BouncyCastleProvider();

    }
    return bouncycastleprovider;
}

bouncycastle提供程序找不到算法所需的类

bouncycastle提供程序找不到算法所需的类

我正在尝试使用bouncycastle使用公共密钥来加密文件。我已经通过编程方式注册了提供程序:

Security.addProvider(new BouncyCastleProvider());

我成功创建了公共密钥对象。

当我使用PGPEncryptedDataGenerator和密钥加密文件时,出现ClassNotFound异常。

似乎提供程序在运行时找不到此类,尽管我确定我有它的jar …

我在Tomcat上运行我的应用程序。使用Maven处理依赖关系-
我放入的充气城堡jars是bcpg,bcprov,bcmail,bctsp。我尝试同时使用1.4和1.6版本,但均未成功。我将maven插件中的“依赖层次结构”用于pom中的蚀和排除,以确保我的项目中没有多个版本的bouncycastle。

这是堆栈跟踪:

org.bouncycastle.openpgp.PGPException: exception encrypting session key        at org.bouncycastle.openpgp.PGPEncryptedDataGenerator.open(Unknown Source)        at org.bouncycastle.openpgp.PGPEncryptedDataGenerator.open(Unknown Source).....(web application stack trace and uninteresting stuff).....Caused by: java.security.NoSuchAlgorithmException: No such algorithm: ElGamal/ECB/PKCS1Padding        at javax.crypto.Cipher.getInstance(DashoA13*..)        at org.bouncycastle.openpgp.PGPEncryptedDataGenerator$PubMethod.addSessionInfo(Unknown Source)        ... 42 moreCaused by: java.security.NoSuchAlgorithmException: class configured for Cipher(provider: BC)cannot be found.        at java.security.Provider$Service.getImplClass(Provider.java:1268)        at java.security.Provider$Service.newInstance(Provider.java:1220)        ... 44 moreCaused by: java.lang.ClassNotFoundException: org.bouncycastle.jce.provider.JCEElGamalCipher$NoPadding        at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1676)        at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1521)        at java.security.Provider$Service.getImplClass(Provider.java:1262)

答案1

小编典典

您有BouncyCastle Security提供程序安装问题,您需要

  • 将BouncyCastle $JAVA_HOME/jre/lib/security/java.security作为提供程序添加到JRE / JDK 文件中(请确保将其添加到运行时使用的JRE中,例如,如果安装了多个JRE / JDK)

例如。

security.provider.2=org.bouncycastle.jce.provider.BouncyCastleProvider

(并对其下方的安全提供程序重新编号-不要将其设置为最高优先级的提供程序)。

  • 或者您可以按照上面的尝试以编程方式添加BouncyCastle,但是在这种情况下,安全策略$JAVA_HOME/jre/lib/security/java.policy应为“无限”(您可以从Java主页下载无限策略文件)。

我们今天的关于bouncycastle + JBoss AS7:JCE无法验证提供者BC无法进行验证的分享已经告一段落,感谢您的关注,如果您想了解更多关于BouncyCastle、Bouncycastle GOST 34.311 哈希与测试示例不同、bouncycastle.jce.provider、bouncycastle提供程序找不到算法所需的类的相关信息,请在本站查询。

本文标签: