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

用webclient 方式:

    /// <summary>
        ///     调用java cxf ws_security加密的服务wcf客户端对应的加密类
        /// </summary>
        public class WssSecurity
        {
            private  byte[] _nonce ;

            );

            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));
            }
            ", "a", "b", "c", "d", "e",
            "f" };
            public static String GetNoce(int length) {
                StringBuilder sb = new StringBuilder();
                Random r=new Random();
                ; 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);//得到返回字符流  

随机推荐

  1. webapi - 模型验证

    本次要和大家分享的是webapi的模型验证,讲解的内容可能不单单是做验证,但都是围绕模型来说明的:首先来吐槽下,今天下午老板为自己买了套新办公家具,看起来挺好说明老板有钱,不好的是我们干技术的又成了搬 ...

  2. [译]你应该知道的4种JavaScript设计模式

    这里介绍下面这4种设计模式 Module Prototype Observer Singleton 每种模式有许多属性构成,在这我只强调一下几点: 1 Context: 在何种情况使用哪种模式? 2 ...

  3. 墙裂推荐一本案例驱动的PhoneGap入门书,早看早收货

    清华大学出版社推出的<构建跨平台APP:PhoneGap移动应用实战> 零门槛学APP开发 从无到有 循序渐进 20余个示例APP 3个项目APP 全平台à跨终端à移动开发 完美生命周期: ...

  4. C# 生成随机数

    private static char[] constant = { ', 'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p ...

  5. 从零开始HTML(三 2016/9/20)

    1.HTML表单 HTML 表单用于搜集不同类型的用户输入.<form> 元素,HTML 表单用于收集用户输入.<form> 元素 ①<input> 元素,< ...

  6. localStorage兼容ie6/7 用addBehavior 实现

    制作过程我就不说了,程序下面会占出来 define(function(){ if('localStorage' in window) return; function Storage(){ this. ...

  7. java 21-13 合并

    SequenceInputStream(Enumeration<? extends InputStream> e)           通过记住参数来初始化新创建的 SequenceInp ...

  8. Nginx 在windows下配合iis搭建负载均衡过程 [转]

    因为项目遇到大量图片存储问题,虽然现在我们图片还不是很多(目前在1T上下,预计增长速度每年1.3倍的增长速度),自己在思考如何有效地存储大量图片时,查找一些资料,看到了,有人使用 Nginx搭建服务器 ...

  9. JavaScript自定义右键菜单

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  10. &quot;aa&quot;.equals(name)这种写法为什么就可以避免空指针

    public static void main(String[] args) { String name=null; if("aa".equals(name))//这种情形,不出现 ...