-
05-07-2019 - |
题
我试图验证XML签名。
根据此教程的验证工作原理细
但我也尝试了第二种方法。要使用签名类的验证方法 我从xml文件中提取了签名和证书,然后执行了以下操作:
public static boolean checkSignedFile(byte[] data, byte[] sigToVerify,
byte[] cert, String algorithm) throws CertificateException,
NoSuchAlgorithmException, InvalidKeyException, SignatureException {
CertificateFactory cf = CertificateFactory.getInstance("X.509");
Certificate c = (Certificate) cf
.generateCertificate(new ByteArrayInputStream(cert));
PublicKey pk = c.getPublicKey();
Signature sig;
boolean verifies = false;
sig = Signature.getInstance(algorithm);
sig.initVerify(pk);
sig.update(data);
verifies = sig.verify(sigToVerify);
return verifies;
}
结果是假的。签名没有验证。可能是什么原因?
解决方案
您无法像这样验证XMLDsig。它不会起作用。签名不是通过原始XML计算的。它必须通过规范化,消化等。
您对 data []
使用了什么?为了做到这一点,您几乎必须重写XMLDsig库。
不隶属于 StackOverflow