首页 > 解决方案 > [签名验证错误]:签名长度不正确:得到 780 但预期为 256

问题描述

要求 :

程序将有一个带有 3 个标签的 xml 文件作为输入: 和所有这些数据都是 Base64 编码的。程序需要对它们进行解码并使用签名和证书验证数据的真实性

已验证的数据应进行 Base64 解码。

签名验证

这是我验证签名的代码

public boolean signAndVerifyXmlDoc(File file) {
DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = null;
try {
  docBuilder = docBuilderFactory.newDocumentBuilder();
} catch (ParserConfigurationException e) {
  e.printStackTrace();
}
Document doc = null;
try {

  String orgContent = "", splitData = "", signContent = "", certContent = "";

  doc = docBuilder.parse(new FileInputStream(file));
  doc.getDocumentElement().normalize();

  NodeList originalContent = doc.getElementsByTagName("OrgContent");
  Element originalElement = (Element) originalContent.item(0);
  NodeList textOrgContent = originalElement.getChildNodes();
  orgContent = ((Node) textOrgContent.item(0)).getNodeValue().trim();

  NodeList signature = doc.getElementsByTagName("Signature");
  Element signatureElement = (Element) signature.item(0);
  NodeList signatureContent = signatureElement.getChildNodes();
  signContent = ((Node) signatureContent.item(0)).getNodeValue().trim();

  NodeList certificate = doc.getElementsByTagName("Certificate");
  Element certificateElement = (Element) certificate.item(0);
  NodeList certificateContent = certificateElement.getChildNodes();
  certContent = ((Node) certificateContent.item(0)).getNodeValue().trim();


  Signature sign = Signature.getInstance("SHA256WITHRSA");
  sign.initVerify(getCertificateFromFile(certContent).getPublicKey());
  sign.update(Base64.decode(orgContent));
  byte[] signdDecode = Base64.decode(signContent);
  boolean b = sign.verify(signdDecode);
  return b;
} catch (SAXException e) {
  e.printStackTrace();
} catch (IOException e) {
  e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
  e.printStackTrace();
} catch (SignatureException e) {
  e.printStackTrace();
} catch (InvalidKeyException e) {
  e.printStackTrace();
}
return false;

}

因此,当我验证签名数据时出现异常。请帮助查找我缺少的内容?

标签: javabase64digital-signaturex509certificatexml-signature

解决方案


推荐阅读