短くするために、私の問題は次のとおりです。
関数の先頭に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)