标题:
基于HTTP在互联网传输敏感数据的消息摘要、签名与加密方案(4)
[打印本页]
作者:
yuyang911220
时间:
2016-8-18 16:28
标题:
基于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配置文件中,而是写在您的生产容器的环境变量中,防止被窃取。
另外,在本方案中生成签名的参数您可以酌情增减并调换顺序,替换签名所采用的算法,或者根据您的实际需要“个性化”一下您的加密算法,以期达到更好的安全效果。
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/)
Powered by Discuz! 7.0.0