让ksoap支持wsse加密的soap报文

简介:

前言

最近,做基于soap服务的项目,获得的一些经验性技巧,分享给大家

WSSE是什么?

传送门

http://ws.apache.org/wss4j/

支持6种不同的加密方式,不过我这里只介绍Username Token Profile 1.1

 

开始动手

阅读Username Token Profile 1.1 后你会知道,我们需要在soap报文头加上什么XML结点,这里就不对XML结点进行介绍,官方文档已经介绍的很详细了.

你已经知道了XML结点的含义以后,就继续看下去,怎么构造符合要求的password

构造password

其实,WSSE最核心就是我们如何构造生成这个密钥,从官方文档中我们知道密钥的读取是:

Password_Digest = Base64 ( SHA-1 ( nonce + created + password ) )

整个密钥关键是由:随机字符串,创建时间,和真实密码构成,知道这点以后就是如何利用java 按照这个步骤生成密钥

生成算法

这部分对于懂的人很简单,但是对于不知道的很困难,之前,我就一直死在了这块,还好有个朋友帮了我一把终于搞明白,原来在jjava下是这么简单的.

首先,要处理SHA-1算法:

在java 下实现 sha-a 算法实在简单:

 
    
  1. MessageDigest md; md = MessageDigest.getInstance("SHA-1"); 

就这样就可以完成了SHA算法的初始化,实在简单呀,之前,我还到处去找包实现,实在对Java太不了解了

生成了这么一个SHA 对象,只是开始,我们需要填充相应的值进去即可.下面要了解请认真观看

 
    
  1. //从官方文档可以知道我们nonce还需要用这里用的是Koap自带的Base64解码一次   
  2. byte[] b1 = nonce != null ? Base64.decode(nonce) :   
  3. new byte[0]; //生成字符字节流   
  4. byte[] b2 = created != null ? created.getBytes("UTF-8")                 :   
  5. new byte[0];   
  6. byte[] b3 = password; //根据我们传得值的长度生成流的长度   
  7. byte[] b4 = new byte[b1.length + b2.length + b3.length]; 

接下来就是根据文档拼接我们的字符串

 
    
  1. //利用sha-1加密字符   
  2. md.update(b1, 0, b1.length);   
  3. md.update(b2,0,b2.length);   
  4. md.update(b3,0,b3.length);   
  5. //生成sha-1加密后的流 
 
    
  1. b4 = md.digest(); //生成最终的加密字符串           
  2. String result = new String(Base64.encode(b4)); 

之前,花了好几个小时,在这方面的资料,最后,发现原来可以这么简单,也许是平时接触的加密等级不高所造成的吧.


本文转自 liam2199 博客,原文链接:  http://blog.51cto.com/youxilua/772641 如需转载请自行联系原作者


相关文章
|
编解码 安全 前端开发
在netty中使用protobuf并实现数据加密传输
在netty中使用protobuf并实现数据加密传输
445 0
在netty中使用protobuf并实现数据加密传输
|
JSON 缓存 数据格式
Thrift协议与传输选择
Thrift协议与传输选择
170 0
|
XML 网络架构 数据格式
Jmeter系列(28)- 发送 soap 协议的接口
Jmeter系列(28)- 发送 soap 协议的接口
182 0
Jmeter系列(28)- 发送 soap 协议的接口
|
网络协议 算法 API
网络协议之:WebSocket的消息格式
网络协议之:WebSocket的消息格式
|
网络协议 Java 编译器
【Android Protobuf 序列化】Protobuf 服务器与客户端通信 ( TCP 通信中使用 Protobuf )
【Android Protobuf 序列化】Protobuf 服务器与客户端通信 ( TCP 通信中使用 Protobuf )
386 0
|
SQL 关系型数据库 数据库
Protobuf协议精品应用
  Protobuf应用广泛,尤其作为网络通讯协议最为普遍。本文将详细描述几个让人眼前一亮的protobuf协议设计,对准备应用或已经应用protobuf的开发者会有所启发,甚至可以直接拿过去用。 这里描述的协议设计被用于生产环境的即时通讯、埋点数据采集、消息推送、redis和mysql数据代理。
1200 0
|
XML JSON 网络架构
Retrofit 用Soap协议访问WebService 详解
参考 1、结合Retrofit使用post请求访问WebService 2、retrofit2调用webservice-2.基本实现 前言 1、首先不要把这个想的太复杂,它就是使用【soap】协议的请求,数据格式都是【xml】,基础还是http的post请求,但是它的规范显然更多一些,总体逃不过【Request和Response】。
1886 0
|
缓存 Java C#
SuperSocket与Netty之实现protobuf协议,包括服务端和客户端
今天准备给大家介绍一个c#服务器框架(SuperSocket)和一个c#客户端框架(SuperSocket.ClientEngine)。这两个框架的作者是园区里面的江大渔。 首先感谢他的无私开源贡献。
1081 0
|
Java 网络架构
SOAP协议是RPC协议的升级版,出现了WSDL
背景 关于RPC协议的思考 RPC协议的组成部分 RPC协议=服务端+服务注册管理中心+客户端,构成客户端可远程调用服务端的方法,就跟调用本地方法一样方便。 Java实现RPC常用的框架RMI 服务注册管理中心常用的框架是ZooKeePer RPC服务端和客户端独立部署 RPC客户端必须包含服务端的接口类 RPC的限制 1、接口只能靠接口文档传递 2、传输内容的限制 SOAP协议 提供了WSDL标准,只需要访问服务地址,自动生成所有接口说明,方便统一 需要软件,朋友都找我。
936 0