C#调用JAVA接口WSSE方式用WebClient方式
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方式的更多相关文章
- android NDK 实用学习(五)-c++端调用java接口
1,阅读此文章前请阅读前面文章,以免阅读出现障碍: android NDK 实用学习(一)-获取java端类及其类变量 android NDK 实用学习(二)-java端对象成员赋值和获取对象成员值 ...
- C#调用java接口报“Fault occurred while processing”异常问题
服务在通常项目中总是要用到的C#的webservice.wcf,还有第三方的,比如java服务.一般来说调用都不会有什么问题,因为服务的标准都是一样的.要注意的就是:1.参数个数匹配:2.参数类型和返 ...
- HttpClient调用RestFul接口(post和get方式)
/** * @version V1.0 * @Description 调用http接口工具类 * @Author pc * @Date 2018/3/2 11:03 */public class Ht ...
- JAVA 调用HTTP接口POST或GET实现方式
HTTP是一个客户端和服务器端请求和应答的标准(TCP),客户端是终端用户,服务器端是网站.通过使用Web浏览器.网络爬虫或者其它的工具,客户端发起一个到服务器上指定端口(默认端口为80)的HTTP请 ...
- php 调用 java 接口
php 需要开启 curl模块 /** HTTP 请求函数封装*/function http_request_cloudzone($url, $data){ //var_dump($url." ...
- HttpClient Get/Post方式调用Http接口
本节摘要:本节主要分别介绍如何用get方式.post方式向http接口发送数据. preparation 1. 项目环境如下: myeclipse6.5 .tomcat5.0.system:xp.JD ...
- 对接第三方平台JAVA接口问题推送和解决
前言 本节所讲为实际项目中与第三方对接出现的问题最后还是靠老大解决了问题以此作为备忘录,本篇分为三小节,一小节解析Java加密接口数据,二小节解析XML文件需注意问题,最后一节则是请求Java Soa ...
- SpringCloud微服务之跨服务调用后端接口
SpringCloud微服务系列博客: SpringCloud微服务之快速搭建EurekaServer:https://blog.csdn.net/egg1996911/article/details ...
- C#调用Java WebService int、DateTime等类型值接收到为空
今天在调用Java接口时,有个int类型的值很明确的传了1,但接口一直返回没有接收到这个值. 解决方法: 引用接口时,VS会自动生成一个类,类中对于非string类型的字段会生成一个xxSpecifi ...
随机推荐
- 跟我一起学WCF(13)——WCF系列总结
引言 WCF是微软为了实现SOA的框架,它是对微乳之前多种分布式技术的继承和扩展,这些技术包括Enterprise Service..NET Remoting.XML Web Service.MSMQ ...
- solr与.net系列课程(六)solr定时增量索引与安全
solr与.net系列课程(六)solr定时增量索引与安全 solr增量索引的方式,就是一个Http请求,但是这样的请求显然不能满足要求,我们需要的是一个自动的增量索引,solr官方提供了一个定时器 ...
- JS学习笔记11_高级技巧
1.类型检测 typeof有时返回值不合理,比如RegExp对象返回object,测试代码: var regex = /^what$/i; regex = new RegExp('^what$'); ...
- ".NET Core Open Source Update"阅读笔记
原文链接:.NET Core Open Source Update [Immo Landwerth发布于2015年1月28日] corefx在github上的forks已经超过1000. 从2014年 ...
- 彻底掌握this,call,apply
说起js里面比较头疼的知识点,this的指向,call与apply的理解这三者肯定算的上前几,好的js开发者这是必须迈过的槛.今天就总结下这三者紧密相连的关系. 首先推荐理解call的用法 Funct ...
- 关于网卡eth0、eth1以及服务器为什么要把内网和外网卡区分开
在搜搜上看到了这个回答,它解释了什么是eth0,eth1: eth0和eth1这是网卡设备,只是个名称不必纠结.通常服务器会有多个网卡的,所以就有eth0 eth1 eth2 这样的名称,而且在一些系 ...
- paip.python3 的类使用跟python2 的不同之处
paip.python3 的类使用跟python2 的不同之处 #------python3的写法而且使用.. #class syllable(BaseClassA, BaseClassB): cla ...
- iOS之富文本
之前做项目时遇到一个问题: 使用UITextView显示一段电影的简介,由于字数比较多,所以字体设置的很小,行间距和段间距也很小,一大段文字挤在一起看起来很别扭,想要把行间距调大,结果在XCode中查 ...
- JDK版本不兼容问题之:一台机器安装多个版本的JDK
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://guojie.blog.51cto.com/59049/45964 我的机器上最开 ...
- IOS开发-图片尺寸
在这篇文章当中,不会讲述关于具体px pt,分辨率,像素的问题,在这篇文章中,只会谈及到一些展现的问题 如果想了解更多关于pt,px之间的关系可以自行到百度查找相关的答案,或者到以下地址阅读更多相关的 ...