public string Encrypt() { string json = JsonConvert.SerializeObject(this, Utils.GlobalSetting); return(CpdailyCrypto.DESEncrypt(json, "ST83=@XV", CpdailyCrypto.IV)); }
public override async Task <LoginParameter> GetLoginParameter(string username, string password, string idsUrl) { LoginParameter loginParameter = new LoginParameter() { Username = username, Password = password, IdsUrl = idsUrl, NeedCaptcha = false }; RestClient LoginClient = new RestClient(idsUrl) { CookieContainer = loginParameter.CookieContainer }; var request = new RestRequest(Method.POST); request.AddHeader("User-Agent", WebUserAgent); var response = await LoginClient.ExecutePostAsync(request); if (response.StatusCode != HttpStatusCode.OK) { throw new Exception("非200状态响应"); } string urlRoot = response.ResponseUri.GetLeftPart(UriPartial.Authority); var needCaptchaTask = NeedCaptcha(urlRoot, loginParameter.CookieContainer, username); loginParameter.CaptchaImageUrl = $"{urlRoot}/authserver/captcha.html"; //** 解析 pwdDefaultEncryptSalt **// var matches = Regex.Matches(response.Content, "var pwdDefaultEncryptSalt *= *\"(.*?)\";"); if (matches.Count <= 0) { throw new Exception("没有匹配到 pwdDefaultEncryptSalt。"); } string pwdDefaultEncryptSalt = null; if (matches[0].Success) { pwdDefaultEncryptSalt = matches[0].Groups[1].Value; } // update encryptedPwd byte[] iv = Encoding.ASCII.GetBytes(CpdailyCrypto.RandomString(16)); string tPassword = CpdailyCrypto.RandomString(64) + password; string encryptedPwd = CpdailyCrypto.AESEncrypt(tPassword, pwdDefaultEncryptSalt, iv); loginParameter.EncryptedPassword = encryptedPwd; //** 解析 action、lt、execution **// var doc = new HtmlDocument(); doc.LoadHtml(response.Content); string action = doc.DocumentNode .SelectNodes(@"//*[@id=""casLoginForm""]")[0] .GetAttributeValue("action", string.Empty); string lt = doc.DocumentNode .SelectNodes(@"//*[@id=""casLoginForm""]/input[1]")[0] .GetAttributeValue("value", string.Empty); string execution = doc.DocumentNode .SelectNodes(@"//*[@id=""casLoginForm""]/input[3]")[0] .GetAttributeValue("value", string.Empty); loginParameter.Parameters.Add("lt", lt); loginParameter.Parameters.Add("execution", execution); loginParameter.ActionUrl = urlRoot + action; loginParameter.NeedCaptcha = await needCaptchaTask; return(loginParameter); }