C#读取JAVA的WSSE接口的调用代码:

用webclient 方式:

    /// <summary>
/// 调用java cxf ws_security加密的服务wcf客户端对应的加密类
/// </summary>
public class WssSecurity
{
private byte[] _nonce ; private string _nonceStr = GetNoce(); private readonly string _pass; //密码
private DateTime _created; public WssSecurity(string p, DateTime t)
{
_pass = p;
_created = t;
} /// <summary>
/// 获取UTC时间
/// </summary>
/// <returns></returns>
public string GetCreatedAsString()
{
return XmlConvert.ToString(_created.ToUniversalTime(), "yyyy-MM-ddTHH:mm:ss.fffZ");
} /// <summary>
/// 获取加密的密码
/// </summary>
/// <returns></returns>
public string GetPasswordDigestAsBase64()
{
//RandomNumberGenerator rndGenerator = new RNGCryptoServiceProvider();
//rndGenerator.GetBytes(_nonce);
// get other operands to the right format _nonce = Encoding.UTF8.GetBytes(_nonceStr);
var newDate = GetCreatedAsString();
byte[] time = Encoding.UTF8.GetBytes(newDate);
byte[] pwd = Encoding.UTF8.GetBytes(_pass);
var operand = new byte[_nonce.Length + time.Length + pwd.Length];
Array.Copy(_nonce,operand,_nonce.Length);
Array.Copy(time,,operand,_nonce.Length,time.Length);
Array.Copy(pwd,,operand,_nonce.Length + time.Length,pwd.Length); // create the hash
SHA1 sha1 = SHA1.Create();
return Convert.ToBase64String(sha1.ComputeHash(operand));
}
private static String[] chars = { "", "", "", "", "", "", "", "", "", "", "a", "b", "c", "d", "e",
"f" };
public static String GetNoce(int length) {
StringBuilder sb = new StringBuilder();
Random r=new Random();
for(int i = ; i < length; i++) {
sb.Append(chars[r.Next()]);
}
return sb.ToString();
} /// <summary>
/// 获取Nonce
/// </summary>
/// <returns></returns>
public string GetNonceAsBase64()
{ return _nonceStr;
}
}

操作方法

            string postString = "{\"devices\":[\"1541351315\"]}";
byte[] postData = Encoding.UTF8.GetBytes(postString);
var wss = new WssSecurity("137E000470C1E8E2FA4B1348AC5B9D7A", DateTime.Now);
WebClient client = new WebClient();
client.Headers.Add("Authorization", "WSSE profile=\"UsernameToken\"");
client.Headers.Add("X-WSSE",
"UsernameToken Username=\"ServiceDevices\", PasswordDigest=\"" + wss.GetPasswordDigestAsBase64() + "\", Nonce=\"" +
wss.GetNonceAsBase64() + "\", Created=\"" + wss.GetCreatedAsString() + "\"");
client.Headers.Add("Content-Type","application/x-www-form-urlencoded;application/xml"); byte[] responseData = client.UploadData("https://xx.com/open/getDeviceInfo","POST",postData);//得到返回字符流

C#调用JAVA接口WSSE方式用WebClient方式的更多相关文章

  1. android NDK 实用学习(五)-c++端调用java接口

    1,阅读此文章前请阅读前面文章,以免阅读出现障碍: android NDK 实用学习(一)-获取java端类及其类变量 android NDK 实用学习(二)-java端对象成员赋值和获取对象成员值 ...

  2. C#调用java接口报“Fault occurred while processing”异常问题

    服务在通常项目中总是要用到的C#的webservice.wcf,还有第三方的,比如java服务.一般来说调用都不会有什么问题,因为服务的标准都是一样的.要注意的就是:1.参数个数匹配:2.参数类型和返 ...

  3. HttpClient调用RestFul接口(post和get方式)

    /** * @version V1.0 * @Description 调用http接口工具类 * @Author pc * @Date 2018/3/2 11:03 */public class Ht ...

  4. JAVA 调用HTTP接口POST或GET实现方式

    HTTP是一个客户端和服务器端请求和应答的标准(TCP),客户端是终端用户,服务器端是网站.通过使用Web浏览器.网络爬虫或者其它的工具,客户端发起一个到服务器上指定端口(默认端口为80)的HTTP请 ...

  5. php 调用 java 接口

    php 需要开启 curl模块 /** HTTP 请求函数封装*/function http_request_cloudzone($url, $data){ //var_dump($url." ...

  6. HttpClient Get/Post方式调用Http接口

    本节摘要:本节主要分别介绍如何用get方式.post方式向http接口发送数据. preparation 1. 项目环境如下: myeclipse6.5 .tomcat5.0.system:xp.JD ...

  7. 对接第三方平台JAVA接口问题推送和解决

    前言 本节所讲为实际项目中与第三方对接出现的问题最后还是靠老大解决了问题以此作为备忘录,本篇分为三小节,一小节解析Java加密接口数据,二小节解析XML文件需注意问题,最后一节则是请求Java Soa ...

  8. SpringCloud微服务之跨服务调用后端接口

    SpringCloud微服务系列博客: SpringCloud微服务之快速搭建EurekaServer:https://blog.csdn.net/egg1996911/article/details ...

  9. C#调用Java WebService int、DateTime等类型值接收到为空

    今天在调用Java接口时,有个int类型的值很明确的传了1,但接口一直返回没有接收到这个值. 解决方法: 引用接口时,VS会自动生成一个类,类中对于非string类型的字段会生成一个xxSpecifi ...

随机推荐

  1. thinkpad E450 fn快捷键设置

    只要按fn+esc两个按键就可以切换fn按键的使用方式

  2. JAVA基于缓冲的文件读写操作

    File f2 = new File("e://index.java"); BufferedReader reader = new BufferedReader(new Input ...

  3. iOS开发常用的第三方类库

    在iOS开发中不可避免的会用到一些第三方类库,它们提供了很多实用的功能,使我们的开发变得更有效率:同时,也可以从它们的源代码中学习到很多有用的东西. Reachability 检测网络连接 用来检查网 ...

  4. 倒排索引压缩:改进的PForDelta算法

    由于倒排索引文件往往占用巨大的磁盘空间,我们自然想到对数据进行压缩.同时,引进压缩算法后,使得磁盘占用减少,操作系统在query processing过程中磁盘读取效率也能提升.另外,压缩算法不仅要考 ...

  5. quartznet笔记

    http://sourceforge.net/projects/quartznet/files/quartznet/

  6. Lingo 做线性规划 - Asset allocation and Portfolio models

    Reference: <An Introduction to Management Science Quantitative Approaches to Decision Making, Rev ...

  7. javaweb学习总结(八)——HttpServletResponse对象(二)

    一.HttpServletResponse常见应用——生成验证码 1.1.生成随机图片用作验证码 生成图片主要用到了一个BufferedImage类,

  8. DOM基本概念和操作

    1.基本概念 DOM是文档对象模型(TEXT),对象是指文档中的每一个元素. 2.Window对象操作 打开方式: _blank  在新窗口还是自身窗口. Window.open 也有返回值,返回值为 ...

  9. hdu 1087 动态规划之最长上升子序列

    http://acm.hdu.edu.cn/showproblem.php?pid=1087 Online Judge Online Exercise Online Teaching Online C ...

  10. Windows Server 2016软件定义存储:Storage Spaces Direct的关键特性

    [TechTarget中国原创] 微软在Windows Server 2016 Technical Preview 2中引入了Storage Spaces Direct.这个特性将本地存储扩展为高可用 ...