2

短くするために、私の問題は次のとおりです。

関数の先頭にBCプロバイダーを追加します。

Security.addProvider(new BouncyCastleProvider());

すべてのサービスを一覧表示するとき

BouncyCastleProvider().getServices();

リストには「RIPEMD160WITHECDSA」が含まれています

このコードスニペットの最後の行:

XMLSignatureFactory factory = XMLSignatureFactory.getInstance("DOM");
DOMValidateContext valContext = new DOMValidateContext(pubkeys[i], sigElement);
valContext.setURIDereferencer(new FileDereferencer(
                              factory.getURIDereferencer(), new File("D:\\eclipseworkspace\\pathtoxml.xml")));
javax.xml.crypto.dsig.XMLSignature xmlSignature = factory.unmarshalXMLSignature(valContext);

メッセージで例外が発生します:

サポートされていないSignatureMethodアルゴリズム:http ://www.w3.org/2007/05/xmldsig-more#ecdsa-ripemd160

どういう意味ですか?RIPEMD160WITHECDSAとこのURLで指定されたアルゴリズムの違いは何ですか?または、URLがこのAlgorithmnameにマップされていないだけですか?

スタックトレースは次のとおりです。

javax.xml.crypto.MarshalException: unsupported SignatureMethod algorithm: http://www.w3.org/2007/05/xmldsig-more#ecdsa-ripemd160
    at org.jcp.xml.dsig.internal.dom.DOMSignatureMethod.unmarshal(Unknown Source)
    at org.jcp.xml.dsig.internal.dom.DOMSignedInfo.<init>(Unknown Source)
    at org.jcp.xml.dsig.internal.dom.DOMXMLSignature.<init>(Unknown Source)
    at org.jcp.xml.dsig.internal.dom.DOMXMLSignatureFactory.unmarshal(Unknown Source)
    at org.jcp.xml.dsig.internal.dom.DOMXMLSignatureFactory.unmarshalXMLSignature(Unknown Source)
    at com.mobile.xmlsignature.XMLSigChecker.verify(XMLSigChecker.java:122)
    at com.mobile.xmlsignature.mainclass.main(mainclass.java:13)
4

1 に答える 1

4

ecdsa-ripemd160は、 DOMSignatureMethodに登録されているデフォルトの署名メソッドの1つではないようです。

XMLSignatureFactory.newSignatureMethod()によると、おそらく次のようなものを使用してecdsa-ripemd160を登録できます。

xmlFact.newSignatureMethod(
    "http://www.w3.org/2007/05/xmldsig-more#ecdsa-ripemd160", 
     MyECDSARipemd160Provider());

SignatureMethodParameterSpecを実装するには、独自のMyECDSARipemd160Provider()クラスをロールする必要があり、アルゴリズムを識別する必要があります。私はこれを試したことがなく、試行錯誤が必要かもしれないと思います。あなたのためにこれを行うBCクラスがあるかどうかはわかりません。このクラスへのgetAlgorithm()呼び出しは、「RIPEMD160WITHECDSA」を返す必要があると思います。

于 2012-08-23T01:36:37.157 に答える