Пример #1
0
        /// <summary>
        /// 对Ts文件加密
        /// </summary>
        /// <param name="file"></param>
        /// <param name="curIndex"></param>
        /// <returns></returns>
        private byte[] TsEncrypt(byte[] file, int curIndex)
        {
            byte[] arrayIv = default;
            arrayIv = ListToBytes(new ArrayList()
            {
                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, curIndex / 255, curIndex % 255
            });
            byte[] data = default;
            if (file != null && file.Length != 0)
            {
                data = AES128.AESEncrypt(file, arrayIv, outFileConfig.tsAESKey);
            }
            else
            {
                Logger.LogDebug("file为空");
            }

            return(data);
        }
Пример #2
0
        /// <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);
            }
        }