本文将分享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
- Bouncycastle GOST 34.311 哈希与测试示例不同
- bouncycastle.jce.provider
- bouncycastle提供程序找不到算法所需的类
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
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。不知何故,结果与测试向量不同。 维基说: "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
我遇到了同样的问题,我可以用这个小代码来解决它。我希望这可以帮助某人 :) .
private static BouncyCastleProvider bouncycastleprovider = null;
public static synchronized BouncyCastleProvider getinstance () {
if (bouncycastleprovider == null) {
bouncycastleprovider = new BouncyCastleProvider();
}
return bouncycastleprovider;
}
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提供程序找不到算法所需的类的相关信息,请在本站查询。
本文标签: