首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

基于HTTP在互联网传输敏感数据的消息摘要、签名与加密方案(4)

基于HTTP在互联网传输敏感数据的消息摘要、签名与加密方案(4)

/**
  •      * TODO Write your own business here.
  •      *  
  •      * @param xml
  •      * @param operation
  •      * @return
  •      */
  •     private String doSomeThing(String xml, String operation) {  
  •         return
    "done";  
  •     }  

  •     /**
  •      * Extract xml string form http request.
  •      *  
  •      * @param request
  •      * @return
  •      * @throws IOException
  •      */
  •     private String getXmlStringFromHttpRequest(HttpServletRequest request) {  
  •         String requestXmlString = "";  
  •         try {  
  •             InputStream inputStream = request.getInputStream();  
  •             String encoding = StringUtils.isNotBlank(request  
  •                     .getCharacterEncoding()) ? request.getCharacterEncoding()  
  •                     : "utf-8";  
  •             requestXmlString = getXmlStringFromInputStream(inputStream,  
  •                     encoding);  
  •             encoding = null;  
  •             inputStream.close();  
  •             inputStream = null;  
  •         } catch (IOException e) {  
  •             log.error(e, e);  
  •         }  

  •         return requestXmlString;  
  •     }  

  •     /**
  •      * Extract xml string from the inputStream.
  •      *  
  •      * @param inputStream
  •      * @param charsetName
  •      * @return
  •      */
  •     private String getXmlStringFromInputStream(InputStream inputStream,  
  •             String charsetName) {  
  •         String resultXmlString = "";  
  •         String tempString = null;  
  •         BufferedReader bufferedReader;  
  •         try {  
  •             bufferedReader = new BufferedReader(new InputStreamReader(  
  •                     inputStream, charsetName));  
  •             tempString = bufferedReader.readLine();  
  •             while (tempString != null) {  
  •                 resultXmlString += tempString;  
  •                 tempString = bufferedReader.readLine();  
  •             }  
  •             tempString = null;  
  •             bufferedReader.close();  
  •             bufferedReader = null;  
  •         } catch (UnsupportedEncodingException e) {  
  •             log.error(e, e);  
  •         } catch (IOException e) {  
  •             log.error(e, e);  
  •         }  
  •         return StringUtils.trim(resultXmlString);  
  •     }  

  • }  

5.maven配置:
Xml代码  [url=][/url]

  • <dependency>
  •     <groupId>org.bouncycastle</groupId>
  •     <artifactId>bcprov-jdk16</artifactId>
  •     <version>1.46</version>
  • </dependency>
  • <dependency>
  •     <groupId>commons-lang</groupId>
  •     <artifactId>commons-lang</artifactId>
  •     <version>2.5</version>
  • </dependency>
  • <dependency>
  •     <groupId>org.apache.httpcomponents</groupId>
  •     <artifactId>httpclient</artifactId>
  •     <version>4.2.5</version>
  • </dependency>
  • <dependency>
  •     <groupId>org.apache.httpcomponents</groupId>
  •     <artifactId>httpmime</artifactId>
  •     <version>4.2.5</version>
  • </dependency>


六、结语
   在本方案设计实现过程中,消息传递的框架采
用的是Java开发者所熟悉的Servlet技术,摘要、签名、加密所采用的算法,以及所依赖的第三方jar也是比较有口碑又大众化的货,对于有类似需要的开发者来说,本方案具有一定的参考意义。远程传递消息框架以及生成签名的环节,主要是模仿了微信公众平台的消息交互方式以及生成签名的思路,而有所创新的一小点是,把消息密文的MD5值也参与到了签名运算中,增加了被仿冒的难度,同时也便于服务方校验消息在传递过程中是否有被第三方所篡改。
   基于简化工程配置的考虑,本示例项目中没有使用spring,您可以在您的生产项目中把本示例中的代码改造成春哥的单例业务bean。密钥、token建议别直接写到春哥的context配置文件中,而是写在您的生产容器的环境变量中,防止被窃取。
   另外,在本方案中生成签名的参数您可以酌情增减并调换顺序,替换签名所采用的算法,或者根据您的实际需要“个性化”一下您的加密算法,以期达到更好的安全效果。
继承事业,薪火相传
返回列表