나는 다이제스트를 시성 및 만들 내가 가지고있는 XML 데이터의 두 부분이 : 난 그냥 두 문자열을 연결하고 전송하는 경우는 루트 요소없이 원시 XML 데이터를 시성
<header authenticate="true">
<static>
<HostID>MMM</HostID>
<TransactionID>98B230CF5FB220FD75FE916949378C2F</TransactionID>
</static>
<mutable>
<TransactionPhase>Receipt</TransactionPhase>
</mutable>
</header>
및
<TransferReceipt authenticate="true">
<ReceiptCode>0</ReceiptCode>
</TransferReceipt>
을 그들은 canonnizer에 바이트 []로 나는 예외를 얻을 : 데이터를 연결하는이 어떻게
org.xml.sax.SAXParseException; lineNumber: 9; columnNumber: 15; Markup im Dokument nach dem Root-Element muss ordnungsgemõ▀ formatiert sein.
at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:257)
at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:338)
at org.apache.xml.security.c14n.Canonicalizer.canonicalize(Unknown Source)
at de.martinm.tools.Utils.DSTools.canonize_data(DSTools.java:141)
at de.martinm.tools.Utils.DSTools.getDigest(DSTools.java:244)
at de.martinm.tools.EBICS.EBICSKernel.send_ack(EBICSKernel.java:1039)
at de.martinm.tools.EBICS.EBICSKernel.process(EBICSKernel.java:1135)
at de.martinm.tools.EBICS.EBICSKernel.main(EBICSKernel.java:1145)
이 할 수 있도록 캐 노니 화되고 인터넷을 통해 전송 한 후에 수신자가 다이제스트를 확인할 수 있습니까?
데이터가 하나의 루트 요소가 없으므로 xml이 유효하지 않습니다.
데이터를 형식화하는 방법에 대한 설명을 찾을 수 없습니다. 여기
코드입니다 :public byte[] getDigest(byte[] data) {
byte[] hash = null;
String algorithm="SHA-256";
try {
MessageDigest digest = MessageDigest.getInstance(algorithm);
byte[] canonical_data = canonize_data(data);
hash = digest.digest(canonical_data);
logger.debug("hash created: {}", Hex.encodeHexString(hash));
} catch (NoSuchAlgorithmException e) {
logger.error(algorithm, e);
};
return hash;
}
public byte[] canonize_data(byte[] data) {
byte[] canonical_data=null;
try {
Canonicalizer c14n = Canonicalizer.getInstance(Canonicalizer.ALGO_ID_C14N_OMIT_COMMENTS);
canonical_data = c14n.canonicalize(data);
} catch (InvalidCanonicalizerException | CanonicalizationException | ParserConfigurationException | IOException | SAXException e) {
logger.error(Canonicalizer.ALGO_ID_C14N_OMIT_COMMENTS, e);
}
logger.debug("data canonized");
return canonical_data;
}
에 수신 된 바이트 CONCAT 별도로 다음 각 조각을 시성해야합니다. 당신은 그들 주위에 다른 것을 감싸거나 어떻게 든 결합해야 할 것입니다. – daniu