gpt4 book ai didi

使用 xml 中的公钥进行 javax.xml.crypto.dsig 验证

转载 作者:搜寻专家 更新时间:2023-10-31 19:49:59 25 4
gpt4 key购买 nike

使用 javax.xml.crypto.dsig,如何在不指定公钥的情况下解码和验证 XMLSignature?公钥似乎在签名的 xml 中,但我想不出获取它的方法。

DOMValidateContext valContext = new DOMValidateContext(key,signatureNode);
XMLSignature signature = fac.unmarshalXMLSignature(valContext);
boolean coreValidity = signature.validate(valContext);

据我所知,有必要将 KeySelector 而不是 Key 传递给 DOMValidateContext。但是,我不知道如何实现 KeySelector。

这是我找到的关于如何实现 KeySelector 的唯一示例: http://download.oracle.com/javase/6/docs/technotes/guides/security/xmldsig/XMLDigitalSignature.html

不幸的是,它不起作用。在该实现中,它执行以下操作但总是失败,因为没有 KeyValue 元素(看起来它们不是 KeyValue 元素,而是 org.jcp.xml.dsig.internal.dom.DOMX509Data 元素,它们无法获取他们的 key )。

List list = keyInfo.getContent();

for (int i = 0; i < list.size(); i++) {
XMLStructure xs = (XMLStructure) list.get(i);
if(xs instanceof KeyValue) {
PublicKey pk = null;
try {
pk = ((KeyValue) xs).getPublicKey();
} catch (KeyException ke) {
throw new KeySelectorException(ke);
}
// make sure algorithm is compatible with method
if (algEquals(sm.getAlgorithm(), pk.getAlgorithm())) {
return new SimpleKeySelectorResult(pk);
}
}
}
throw new KeySelectorException("No KeyValue element found!");

那么,有没有办法做到这一点?我希望能够在不需要公钥的情况下验证 xml 文件的签名。我只想从 xml 中获取公钥。

最佳答案

扩展您检查 xs 是否是 KeyValue 实例的 if () 条件,以检查 X509Data 实例,如下所示:

else if (xs instanceof X509Data) {
for (Object data : ((X509Data) xs).getContent()) {
if (data instanceof X509Certificate) {
pk = ((X509Certificate) data).getPublicKey();
}
}
}

关于使用 xml 中的公钥进行 javax.xml.crypto.dsig 验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4675854/

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