示例#1
0
        public static async Task <string> GetEncryptedPassword(string passWord)
        {
            string base64String;

            try
            {
                //https://secure.bilibili.com/login?act=getkey&rnd=4928
                //https://passport.bilibili.com/login?act=getkey&rnd=4928
                HttpBaseProtocolFilter httpBaseProtocolFilter = new HttpBaseProtocolFilter();
                httpBaseProtocolFilter.IgnorableServerCertificateErrors.Add(Windows.Security.Cryptography.Certificates.ChainValidationResult.Expired);
                httpBaseProtocolFilter.IgnorableServerCertificateErrors.Add(Windows.Security.Cryptography.Certificates.ChainValidationResult.Untrusted);
                Windows.Web.Http.HttpClient httpClient = new Windows.Web.Http.HttpClient(httpBaseProtocolFilter);
                //WebClientClass wc = new WebClientClass();
                string url = string.Format(" https://passport.bilibili.com/api/oauth2/getKey?appkey={0}&build=411005&mobi_app=android&platform=wp&ts={1}000", _appKey, GetTimeSpan);
                url += "&sign=" + GetSign(url);

                string stringAsync = await WebClientClass.PostResults(new Uri(url), "");

                JObject jObjects = JObject.Parse(stringAsync);
                string  str      = jObjects["data"]["hash"].ToString();
                string  str1     = jObjects["data"]["key"].ToString();
                string  str2     = string.Concat(str, passWord);
                string  str3     = Regex.Match(str1, "BEGIN PUBLIC KEY-----(?<key>[\\s\\S]+)-----END PUBLIC KEY").Groups["key"].Value.Trim();
                byte[]  numArray = Convert.FromBase64String(str3);
                AsymmetricKeyAlgorithmProvider asymmetricKeyAlgorithmProvider = AsymmetricKeyAlgorithmProvider.OpenAlgorithm(AsymmetricAlgorithmNames.RsaPkcs1);
                CryptographicKey cryptographicKey = asymmetricKeyAlgorithmProvider.ImportPublicKey(WindowsRuntimeBufferExtensions.AsBuffer(numArray), 0);
                IBuffer          buffer           = CryptographicEngine.Encrypt(cryptographicKey, WindowsRuntimeBufferExtensions.AsBuffer(Encoding.UTF8.GetBytes(str2)), null);
                base64String = Convert.ToBase64String(WindowsRuntimeBufferExtensions.ToArray(buffer));
            }
            catch (Exception)
            {
                //throw;
                base64String = passWord;
            }
            return(base64String);
        }
示例#2
0
        //public static async Task<string> LoginBilibili(string UserName, string Password)
        //{
        //    try
        //    {
        //        //https://api.bilibili.com/login?appkey=422fd9d7289a1dd9&platform=wp&pwd=JPJclVQpH4jwouRcSnngNnuPEq1S1rizxVJjLTg%2FtdqkKOizeIjS4CeRZsQg4%2F500Oye7IP4gWXhCRfHT6pDrboBNNkYywcrAhbOPtdx35ETcPfbjXNGSxteVDXw9Xq1ng0pcP1burNnAYtNRSayEKC1jiugi1LKyWbXpYE6VaM%3D&type=json&userid=xiaoyaocz&sign=74e4c872ec7b9d83d3a8a714e7e3b4b3
        //        //发送第一次请求,得到access_key
        //        string url = "https://api.bilibili.com/login?appkey=422fd9d7289a1dd9&platform=wp&pwd=" + WebUtility.UrlEncode(await GetEncryptedPassword(Password)) + "&type=json&userid=" + WebUtility.UrlEncode(UserName);
        //        url += "&sign="+GetSign(url);

        //        string results = await WebClientClass.GetResults(new Uri(url));
        //        //Json解析及数据判断
        //        LoginModel model = new LoginModel();
        //        model = JsonConvert.DeserializeObject<LoginModel>(results);
        //        if (model.code == -627)
        //        {
        //            return "登录失败,密码错误!";
        //        }
        //        if (model.code == -626)
        //        {
        //            return "登录失败,账号不存在!";
        //        }
        //        if (model.code == -625)
        //        {
        //            return "密码错误多次";
        //        }
        //        if (model.code == -628)
        //        {
        //            return "未知错误";
        //        }
        //        if (model.code == -1)
        //        {
        //            return "登录失败,程序注册失败!请联系作者!";
        //        }

        //        if (model.code == 0)
        //        {
        //            access_key = model.access_key;
        //            string urlgo = "http://api.bilibili.com/login/sso?gourl=http%3A%2F%2Fwww.bilibili.com&access_key=" + model.access_key + "&appkey=422fd9d7289a1dd9&platform=android&scale=xhdpi";
        //            urlgo += "&sign=" + ApiHelper.GetSign(urlgo);
        //            WebView WB = new WebView();
        //            WB.Navigate(new Uri(urlgo));

        //           // await WebClientClass.GetResults(new Uri(urlgo));

        //            StorageFolder folder = ApplicationData.Current.LocalFolder;
        //            StorageFile file = await folder.CreateFileAsync("us.bili", CreationCollisionOption.OpenIfExists);
        //            await FileIO.WriteTextAsync(file, model.access_key);
        //        }
        //        //看看存不存在Cookie
        //        HttpBaseProtocolFilter hb = new HttpBaseProtocolFilter();
        //        HttpCookieCollection cookieCollection = hb.CookieManager.GetCookies(new Uri("http://bilibili.com/"));

        //        List<string> ls = new List<string>();
        //        foreach (HttpCookie item in cookieCollection)
        //        {
        //            ls.Add(item.Name);
        //        }
        //        if (ls.Contains("DedeUserID"))
        //        {
        //            return "登录成功";
        //        }
        //        else
        //        {
        //            return "登录失败";
        //        }
        //    }
        //    catch (Exception ex)
        //    {
        //        if (ex.HResult == -2147012867)
        //        {
        //            return "登录失败,检查你的网络连接!";
        //        }
        //        else
        //        {
        //            return "登录发生错误";
        //        }

        //    }

        //}
        public static async Task <string> LoginBilibili(string UserName, string Password)
        {
            try
            {
                //https://api.bilibili.com/login?appkey=422fd9d7289a1dd9&platform=wp&pwd=JPJclVQpH4jwouRcSnngNnuPEq1S1rizxVJjLTg%2FtdqkKOizeIjS4CeRZsQg4%2F500Oye7IP4gWXhCRfHT6pDrboBNNkYywcrAhbOPtdx35ETcPfbjXNGSxteVDXw9Xq1ng0pcP1burNnAYtNRSayEKC1jiugi1LKyWbXpYE6VaM%3D&type=json&userid=xiaoyaocz&sign=74e4c872ec7b9d83d3a8a714e7e3b4b3
                //发送第一次请求,得到access_key
                string url = "https://passport.bilibili.com/api/oauth2/login"; //+ WebUtility.UrlEncode(await GetEncryptedPassword(Password)) + " &type=json&userid=" + WebUtility.UrlEncode(UserName);
                //url += "&sign=" + GetSign(url);

                string content = string.Format("appkey={0}&build=411005&mobi_app=android&password={1}&platform=wp&ts={2}000&username={3}", _appKey, WebUtility.UrlEncode(await GetEncryptedPassword(Password)), GetTimeSpan, WebUtility.UrlEncode(UserName));
                content += "&sign=" + GetSign(content);
                string results = await WebClientClass.PostResults(new Uri(url), content);

                //Json解析及数据判断
                LoginModel model = new LoginModel();
                model = JsonConvert.DeserializeObject <LoginModel>(results);
                if (model.code == -627)
                {
                    return("登录失败,密码错误!");
                }
                if (model.code == -626)
                {
                    return("登录失败,账号不存在!");
                }
                if (model.code == -625)
                {
                    return("密码错误多次");
                }
                if (model.code == -628)
                {
                    return("未知错误");
                }
                if (model.code == -1)
                {
                    return("登录失败,程序注册失败!请联系作者!");
                }

                if (model.code == 0)
                {
                    access_key = model.data.access_token;
                    string urlgo = "http://api.bilibili.com/login/sso?gourl=http%3A%2F%2Fwww.bilibili.com&access_key=" + model.data.access_token + "&appkey=422fd9d7289a1dd9&platform=android&scale=xhdpi";
                    urlgo += "&sign=" + ApiHelper.GetSign(urlgo);
                    try
                    {
                        await WebClientClass.GetResults(new Uri(urlgo));
                    }
                    catch (Exception)
                    {
                    }



                    // await WebClientClass.GetResults(new Uri(urlgo));
                    SettingHelper.Set_Access_key(model.data.access_token);
                    //StorageFolder folder = ApplicationData.Current.LocalFolder;
                    //StorageFile file = await folder.CreateFileAsync("us.bili", CreationCollisionOption.OpenIfExists);
                    //await FileIO.WriteTextAsync(file, model.data.access_token);
                }
                //看看存不存在Cookie
                HttpBaseProtocolFilter hb = new HttpBaseProtocolFilter();
                HttpCookieCollection   cookieCollection = hb.CookieManager.GetCookies(new Uri("http://bilibili.com/"));

                List <string> ls = new List <string>();
                foreach (HttpCookie item in cookieCollection)
                {
                    ls.Add(item.Name);
                }
                if (ls.Contains("DedeUserID"))
                {
                    return("登录成功");
                }
                else
                {
                    return("登录失败");
                }
            }
            catch (Exception ex)
            {
                if (ex.HResult == -2147012867)
                {
                    return("登录失败,检查你的网络连接!");
                }
                else
                {
                    return("登录发生错误");
                }
            }
        }