• 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(29);
    
                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,0,operand,_nonce.Length,time.Length);
                    Array.Copy(pwd,0,operand,_nonce.Length + time.Length,pwd.Length);
    
                    // create the hash
                    SHA1 sha1 = SHA1.Create();
                    return Convert.ToBase64String(sha1.ComputeHash(operand));
                }
                private static  String[] chars = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e",
                "f" };
                public static String GetNoce(int length) {
                    StringBuilder sb = new StringBuilder();
                    Random r=new Random();
                    for(int i = 0; i < length; i++) {
                        sb.Append(chars[r.Next(15)]);
                    }
                    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);//得到返回字符流  
  • 相关阅读:
    ioremap函数
    kmalloc、kzalloc和vmalloc
    C语言 snprintf函数
    C语言 memset函数
    消息队列
    mount -a
    linux系统查看服务状态和启动停止服务
    Java中创建对象的内存图
    Java中数组在内存中的图解
    socket编程(Java实现)
  • 原文地址:https://www.cnblogs.com/flyfish2012/p/5537439.html
Copyright © 2020-2023  润新知