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. 无线安全专题_破解篇02--kali破解pin码

    最近项目有点紧,所以本应该上周发的文章,拖到了本周三,在此说声抱歉.无线安全专题,我打算系统地写六个部分,分别为破解篇,攻击篇,欺骗篇,路由篇,移动篇和蓝牙篇,当然在发布的过程中,可能还会掺杂着发布f ...

  2. windows上自动设置java环境变量的脚本

    近期打算学习安卓开发,于是乎要准备java开发环境,安装好jdk后,就要设置java环境变量,java环境变量要设置JAVA_HOME,Path,CLASSPATH三个值,每次配置查百度复制粘贴都很麻 ...

  3. 能省则省:在ASP.NET Web API中通过HTTP Headers返回数据

    对于一些返回数据非常简单的 Web API,比如我们今天遇到的“返回指定用户的未读站内短消息数”,返回数据就是一个数字,如果通过 http response body 返回数据,显得有些奢侈.何不直接 ...

  4. bootstrap日期选择器-datetimepicker

    地址:http://www.bootcss.com/p/bootstrap-datetimepicker/ 使用方法,html: <div class="input-append da ...

  5. 微软Dynamics 使用葡萄城的Wijmo 5提供移动端用户界面

    近日,全球最大的控件提供商葡萄城公司宣布: 葡萄城近日与微软公司达成合作,将Wijmo 产品线的HTML5和JaveScript 控件融合到微软Dynamics CRMOnline 2016版中. 随 ...

  6. JavaScript toFixed function Not Rouding

    JavaScript库函数toFixed用来将给定的数字四舍五入为指定的小数位数,W3school上有详细的介绍.众所周知,在处理小数位四舍五入的时候存在两种方式:一种是逢五进一,如5.885保留两位 ...

  7. error at ::0 can't find referenced pointcut解决办法(转载)

    原文:http://blog.sina.com.cn/s/blog_9ecb0d9d0101fheg.html Spring中采用annotation的方式实现AOP代理,运行测试代码时抛出以下异常: ...

  8. mysql 密码重置

    1.停止mysql服务(以管理员身份,在cmd命令行下运行) net stop mysql 2.使用命令启动mysql数据库,跳过权限验证 mysqld -nt --skip-grant-tables ...

  9. 在Mac OS上安装Vagrant和Docker的教程

    转载于:http://www.itxuexiwang.com/a/shujukujishu/redis/2016/0216/128.html?1455808640 当听到很多人在说Docker是多么多 ...

  10. 【Android】Eclipse Memory Analyzer 进行堆内存溢出分析

    MAT 不是一个万能工具,它并不能处理所有类型的堆存储文件.     不同厂家的 JVM 所生成的堆转储文件在数据存储格式以及数据存储内容上有很多区别,但是比较主流的厂家和格式,例如 Sun, HP, ...