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. javascript中的call()和apply()方法的使用

    1.方法定义 call方法: 语法:call([thisObj[,arg1[, arg2[,   [,.argN]]]]]) 定义:调用一个对象的一个方法,以另一个对象替换当前对象. 说明: call ...

  2. Scrum 是什么?

    Scrum 是什么? Scrum 是当前最流行的敏捷软件开发方法论和实施框架.但就像人们对 “Agile” 术语的不同理解一样,不同的人对 “Scrum” 也有着不同的理解.那么,到底 Scrum 是 ...

  3. c++如何遍历删除map/vector里面的元素

    新技能Get! 问题 对于c++里面的容器, 我们可以使用iterator进行方便的遍历. 但是当我们通过iterator对vector/map等进行修改时, 我们就要小心了, 因为操作往往会导致it ...

  4. 第八章xml学习

    1.ASP.NET和JSP的关系 ASP.NET 和JSP都是用来开发动态网站的技术,只不过ASP.NET是通过c#语言来操作的, 而JSP是通过Java语言来操作的. 2.为什么学习XML? 01. ...

  5. Lingo 做线性规划 - DEA

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

  6. Java程序员的日常—— 《编程思想》关于类的使用常识

    Java虽然利用JVM,让程序员可以放心大胆的使用,可是仍然会出现内存泄露等问题.世上没有绝对的银弹,因此也不能完全把所有的任务都交给JVM,了解Java中的初始化与垃圾回收还是必不可少的知识. 关于 ...

  7. Leetcode 66 Plus One STL

    题意让大数加1 我的做法是先让个位+1,再倒置digits,然后进位,最后倒置digits,得到答案. class Solution { public: vector<int> plusO ...

  8. Struts2入门2 Struts2深入

    Struts2入门2 Struts2深入 链接: http://pan.baidu.com/s/1rdCDh 密码: sm5h 前言: 前面学习那一节,搞得我是在是太痛苦了.因为在Web项目中确实不知 ...

  9. 内存缓存LruCache实现原理

    自己项目中一直都是用的开源的xUtils框架,包括BitmapUtils.DbUtils.ViewUtils和HttpUtils四大模块,这四大模块都是项目中比较常用的.最近决定研究一下xUtils的 ...

  10. Android 图片的裁剪与相机调用

    有时候我们需要的图片并不适合我们想要的大小, 那么我们就可以用到系统自带的图片裁剪功能, 把规定范围的图像给剪出来. 贴上部分代码: //调用图库 Intent intent = new Intent ...