123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- /**
- * 对公众平台发送给公众账号的消息加解密示例代码.
- *
- * @copyright Copyright (c) 1998-2014 Tencent Inc.
- */
- // ------------------------------------------------------------------------
- package com.yihu.utils.aes;
- import java.io.StringReader;
- import javax.xml.parsers.DocumentBuilder;
- import javax.xml.parsers.DocumentBuilderFactory;
- import org.w3c.dom.Document;
- import org.w3c.dom.Element;
- import org.w3c.dom.NodeList;
- import org.xml.sax.InputSource;
- /**
- * XMLParse class
- *
- * 提供提取消息格式中的密文及生成回复消息格式的接口.
- */
- class XMLParse {
- /**
- * 提取出xml数据包中的加密消息
- * @param xmltext 待提取的xml字符串
- * @return 提取出的加密消息字符串
- * @throws AesException
- */
- public static Object[] extract(String xmltext) throws AesException {
- Object[] result = new Object[3];
- try {
- DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
- DocumentBuilder db = dbf.newDocumentBuilder();
- StringReader sr = new StringReader(xmltext);
- InputSource is = new InputSource(sr);
- Document document = db.parse(is);
- Element root = document.getDocumentElement();
- NodeList nodelist1 = root.getElementsByTagName("Encrypt");
- NodeList nodelist2 = root.getElementsByTagName("ToUserName");
- result[0] = 0;
- result[1] = nodelist1.item(0).getTextContent();
- result[2] = nodelist2.item(0).getTextContent();
- return result;
- } catch (Exception e) {
- e.printStackTrace();
- throw new AesException(AesException.ParseXmlError);
- }
- }
- /**
- * 生成xml消息
- * @param encrypt 加密后的消息密文
- * @param signature 安全签名
- * @param timestamp 时间戳
- * @param nonce 随机字符串
- * @return 生成的xml字符串
- */
- public static String generate(String encrypt, String signature, String timestamp) {
- String format = "<xml>\n" + "<Encrypt><![CDATA[%1$s]]></Encrypt>\n"
- + "<MsgSignature><![CDATA[%2$s]]></MsgSignature>\n"
- + "<TimeStamp>%3$s</TimeStamp>\n" + "</xml>";
- return String.format(format, encrypt, signature, timestamp);
- }
- }
|