gpt4 book ai didi

java - BouncycaSTLe XmlSignatureFactory NoSuchAlgorithmException 异常

转载 作者:行者123 更新时间:2023-11-29 03:44:16 26 4
gpt4 key购买 nike

我在使用 BouncyCaSTLe 检查 XMLSignature 以验证使用 ECDSA 的签名时遇到问题。

以下是相关的代码行:

BouncyCastleProvider provider = new BouncyCastleProvider();
Security.addProvider(provider);
//some unrelated code
XMLSignatureFactory factory = XMLSignatureFactory.getInstance("DOM", provider);

在最后一行,抛出以下异常:

javax.xml.crypto.NoSuchMechanismException: java.security.NoSuchAlgorithmException: no such algorithm: DOM for provider SC

如果我将行更改为

XMLSignatureFactory factory = XMLSignatureFactory.getInstance("DOM");

我明白了

javax.xml.crypto.MarshalException: unsupported SignatureMethod algorithm: http://www.w3.org/2007/05/xmldsig-more#ecdsa-ripemd160

有人知道是什么原因造成的吗?

最佳答案

在您的第一个错误中,您可以在错误描述中读到“没有这样的算法:提供商 SC 的 DOM”。这很奇怪,因为它说的是“供应商 SC”(Sun PC/SC 供应商)而不是它应该说的“供应商 BC”(BouncyCaSTLe 安全供应商)。看起来您的代码(内部)没有按照您的意愿使用 BouncycaSTLe。您应该找出发生这种情况的原因。它可能与 BC 库和类路径(如果您正在使用应用程序服务器)或提供商订单配置有关。

第二个错误。您更改获取 XMLSignatureFactory 的方法。这个更好,因为如果你不指定提供者,因为:

This method uses the standard JCA provider lookup mechanism to locate and instantiate an XMLSignatureFactory implementation of the desired mechanism type. It traverses the list of registered security Providers, starting with the most preferred Provider. A new XMLSignatureFactory object from the first Provider that supports the specified mechanism is returned.

但是现在,算法不存在了。所以为什么?在这里,我会说 BC 没有被使用。它在那里?检查您的类路径。

列出所有可用的提供程序可能会有所帮助:

for (Provider p : Security.getProviders()) {

log.debug(p.getName());
log.debug(p.getInfo());
}

关于java - BouncycaSTLe XmlSignatureFactory NoSuchAlgorithmException 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11716579/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com