/// <summary> /// 解密 /// </summary> /// <param name="file"></param> /// <param name="curIndex"></param> /// <returns></returns> private byte[] DealTS(byte[] file, int curIndex) { //偏移量 byte[] arrayIv = default; if (string.IsNullOrEmpty(aesConf.iv)) { arrayIv = ListToBytes(new ArrayList() { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, curIndex / 255, curIndex % 255 }); } else { arrayIv = Encoding.UTF8.GetBytes(aesConf.iv); } byte[] data = default; if (file != null && file.Length != 0) { data = !string.IsNullOrEmpty(aesConf.uri) ? AES128.AESDecrypt(file, arrayIv, aesConf.key) : file; } else { //IsComplete = false; Logger.LogDebug("file为空"); } //解密 AES return(data); }
/// <summary> /// 登录 /// </summary> /// <returns></returns> private async Task LoginToBilibili() { async Task WriteLoginDataToFile(Account account) { if (account == null) { throw new Exception("Write to file data can not null."); } string dataBeforeEncrypt = JsonUtil.SerializeObject(account); string dataAfterEncrypt = AES128.AESEncrypt(dataBeforeEncrypt, _config.AppSetting.Key, "40863a4f-7cbe-4be2-bb54-765233c83d25"); await File.WriteAllBytesAsync(_dataFilePath, Encoding.UTF8.GetBytes(dataAfterEncrypt)); } async Task LoginByPassword() { Account account = ByPassword.LoginByPassword(_config.UserSetting.Account, _config.UserSetting.Password); if (account == null) { throw new Exception("Get account info failed."); } if (account.LoginStatus != Account.LoginStatusEnum.ByPassword) { throw new Exception($"登录失败,登录失败原因:{account.LoginStatus}"); } await WriteLoginDataToFile(account); _account = account; } try { if (!File.Exists(_dataFilePath)) { await LoginByPassword(); return; } //获取历史登录信息 string fileStr = await File.ReadAllTextAsync(_dataFilePath); if (string.IsNullOrEmpty(fileStr)) { await LoginByPassword(); return; } Account account = null; try { string decodeStr = AES128.AESDecrypt(fileStr, _config.AppSetting.Key, "40863a4f-7cbe-4be2-bb54-765233c83d25"); if (string.IsNullOrEmpty(decodeStr)) { await LoginByPassword(); return; } account = JsonUtil.DeserializeJsonToObject <Account>(decodeStr); } catch { await LoginByPassword(); return; } //判断AccessToken是否有效 if (account == null || !ByPassword.IsTokenAvailable(account.AccessToken) || account.UserName != _config.UserSetting.Account) { await LoginByPassword(); return; } //判断AccessToken是否需要续期 if (account.Expires_AccessToken != DateTime.MinValue && account.Expires_AccessToken.AddDays(-7) < DateTime.Now) { DateTime?dt = ByPassword.RefreshToken(account.AccessToken, account.RefreshToken); if (dt == null) { await LoginByPassword(); return; } account.Expires_AccessToken = dt.Value; //更新 await WriteLoginDataToFile(account); _account = account; } else { _account = account; return; } } catch (Exception ex) { throw new Exception($"Login to bilibili failed, login account is {_config.UserSetting.Account}. {ex.Message}", ex); } }