2

У меня есть файл word/docx, который был подписан цифровой подписью.Как получить данные цифровой подписи из файла Word с помощью Java?

мне нужно открыть файл и прочитать тему подписи, действующую от, действуют до и остальных деталей (в том числе открытого ключа RSA)

Как я могу сделать это с Java?

Следующая ссылка не помогла мне, поскольку у меня уже есть подписанный документ.

Load RSA public key from file

Я попытался с апача пои, но неуспех, возвращение обнуляет только

public static void main(String[] args) throws IOException, XmlException { 
     String fileName = "test.docx"; 
     OPCPackage pkg = null; 
     try { 
      pkg = OPCPackage.open(fileName, PackageAccess.READ_WRITE); 
     } catch (InvalidFormatException ex) { 
      ex.printStackTrace(); 
     } 
     SignatureConfig sic = new SignatureConfig(); 
     sic.getProxyUrl(); 
     sic.setOpcPackage(pkg); 
     SignatureInfo si = new SignatureInfo(); 
     si.setSignatureConfig(sic); 
     boolean isValid = si.verifySignature(); 

     System.out.println("isValid " + isValid); 


     Iterator<SignaturePart> iter = si.getSignatureParts().iterator(); 
     while (iter.hasNext()) { 
      SignaturePart element = iter.next(); 

      System.out.println("getSigner " + element.getSigner()); 

      List<X509Certificate> list = element.getCertChain(); 
      for (X509Certificate cc : list) { 
       System.out.println("getSigAlgName " + cc.getSigAlgName()); 
       System.out.println("getSigAlgOID " + cc.getSigAlgOID()); 
       System.out.println("getNotAfter " + cc.getNotAfter()); 
       System.out.println("getNotBefore " + cc.getNotBefore()); 
      } 


     } 

но проверка IsValid, вернулся правда ..

+0

Я пытался использовать Apache POI –

+0

Пробовал ли вы [Apache POI exampl e при проверке подписи] (http://poi.apache.org/encryption.html#Validating+a+signed+office+document)? – Gagravarr

+0

Можете ли вы предоставить мне этот файл или аналогичный подписанный файл фиктивного файла? либо через вход bugzilla, либо по электронной почте (kiwiwings ... apache.org) ... – kiwiwings

ответ

-1

... а затем

boolean isValid = si.verifySignature(); 
List<X509Certificate> result = new ArrayList<X509Certificate>(); 
for (SignaturePart sp : si.getSignatureParts()) { 
    if (sp.validate()) { 
     result.add(sp.getSigner()); 
    } 
} 
pkg.revert(); 
pkg.close(); 
+0

просим прочитать [как ответить] (http://stackoverflow.com/help/how-to-answer) и объяснить свой ответ –