自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(26)
  • 收藏
  • 关注

原创 云影密码 ctf

云影密码1. 密码原理有1,2,4,8这四个数字,可以通过加法来用这四个数字表示0-9中的任何一个数字,列如0=28, 也就是0=2+8,同理7=124, 9=18。这样之后再用1-26来表示26个英文字母,就有了密文与明文之间的对应关系。引入0来作为间隔,以免出现混乱。所以云影密码又叫“01248密码”。2. 解密脚本a="8842101220480224404014224202480122"s=a.split('0')print(s)l=[]for i in s: sum=0

2021-10-27 14:45:03 3197

原创 希尔密码 ctf

希尔密码原理希尔加密算法的基本思想是,将d个明文字母通过线性变换将它们转换为d个密文字母。解密只要作一次逆变换就可以了,密钥就是变换矩阵本身。加密 mK=c 解密 cK^(-1)=m例题①加密②解密脚本import numpyc = 'xcezmgmy'k = numpy.matrix([[1,2],[0,1]])kn = numpy.linalg.inv(k)num_c = []temp =[]cnt = 1for i in c: temp

2021-10-27 14:41:31 3345 1

原创 维吉尼亚密码 ctf

维吉尼亚密码BUUCTF-Crypto-[BJDCTF 2nd]燕言燕语-y1ng小燕子,穿花衣,年年春天来这里,我问燕子你为啥来,燕子说:79616E7A69205A4A517B78696C7A765F6971737375686F635F73757A6A677D20转字符串得 yanzi ZJQ{xilzv_iqssuhoc_suzjg}原理维吉尼亚密码(又译维热纳尔密码)是使用一系列凯撒密码组成密码字母表的加密算法,属于多表密码的一种简单形式。加密步骤①当明文

2021-10-27 14:36:44 3877

原创 仿射密码 ctf

原理改密码运用乘法逆元和模运算。az对应于025, 将明文的每个字符转为对应的数字加密函数 E(x)=(a*x+b)(mod 26) a,b为密钥,a必须与26互质解密函数 D(x)=a^(-1) (x-b)(mod 26) a^(-1) 为a关于26的乘法逆元分析已知加密函数e(x)=11x+6(mod 26)。求出11关于26的乘法逆元19,则D(x)=19*(x-6)(mod 26)脚本import base64# 求逆元from gmpy2 imp

2021-10-27 14:31:43 1145

原创 ctf 凯撒密码

凯撒密码1. 原理凯撒密码一般适用于26个英文字母。根据偏移量来进行加密。如图所示,当偏移量=3。即是A-D,B-E。把字母转成数学,数学公式如下。2. 例题分析加密密文:afZ_r9VYfScOeO_UL^RWUc格式:flag{ }由题目可知其格式为flag{ },所以我们可以从flag和afZ_之间的对应关系找出规律。从第一个字符的偏移量为5,第二个字符的偏移量为6……第n个字符的偏移量为4+n。偏移量依次递增。3. 脚本C='afZ_r9VYfScOeO_UL^RWUc'f

2021-10-26 09:50:58 3662

原创 观察者模式和发布订阅模式

设计模式一、观察者模式监控一个对象,一旦对象的状态发生变化,马上触发技能 需要两个构造函数实现创建被观察者​ =>属性:自己的状态​ =>队列:记录有谁在观察自己,数组[]​ =>方法:改变状态、添加观察者、删除观察者创建观察者​ =>需要一个身份​ =>需要一个技能 //被观察者 class Subject { constructor(state) { //被观察者的状态

2021-09-01 17:00:46 66

原创 Even Loop(事件循环)

javascript运行机制进程和线程进程是系统进行资源分配和调度的一个独立单位是程序的一次执行。线程是 cpu 调度的最小单位(线程是建立在进程的基础上的一次程序运行单位,一个进程中可以有多个线程)1、概念①同步:按顺序执行;②异步:先执行一部分,等拿到结果(或到时间)再执行后续代码;{​ 计时器(setTimeout,setInterval)​ ajax​ 读取文件​ dom事件}③单线程:一个任务完成后才能执行另一个任务;2、程序执行顺序①同

2021-08-29 19:28:18 780

原创 浏览器渲染

一、 渲染的流程图二、渲染流程有四个主要步骤解析HTML生成DOM树 - 渲染引擎首先解析HTML文档,生成DOM树构建Render树 - 接下来CSS样式会被解析生成CSSOM树,根据DOM树与CSSOM树生成另外一棵用于渲染的树-渲染树(Render tree),布局Render树 - 然后对渲染树的每个节点进行布局处理,确定其在屏幕上的显示位置绘制Render树 - 最后遍历渲染树并用UI后端层将每一个节点绘制出来三、渲染的细节1. 构建DOM树当解析器发现非阻塞资源,例如一张图

2021-08-15 23:58:56 84

原创 服务器缓存(CDN)

服务器缓存(CDN)9.1过程①、当用户点击APP上的内容,APP会根据URL地址去本地DNS(域名解析系统)寻求IP地址解析。②、本地DNS系统会将域名的解析权交给CDN专用DNS服务器。③、CDN专用DNS服务器,将CDN的全局负载均衡设备IP地址返回用户。④、用户向CDN的负载均衡设备发起内容URL访问请求。⑤、CDN负载均衡设备根据用户IP地址,以及用户请求的内容URL,选择一台用户所属区域的缓存服务器。⑥、负载均衡设备告诉用户这台缓存服务器的IP地址,让用户向所选择的缓存服务器发起

2021-08-15 23:56:48 463

原创 tcp三次握手四次挥手

4.4TCP 三次握手4.4.1 过程第一次握手:客户端尝试连接服务器,向服务器发送 SYN 包,seq=x,客户端进入 SYN_SEND 状态等待服务器确认第二次握手:服务器接收客户端SYN包并确认(ack=x+1),同时向客户端发送一个 SYN包(seq=Y),即 SYN+ACK 包,此时服务器进入 SYN_RECV 状态第三次握手:第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=Y+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次

2021-08-15 23:55:57 189

原创 http缓存

http缓存2.1强制缓存对于强制缓存来说,响应header中会有两个字段来标明失效规则(Expires/Cache-Control)2.1.1ExpiresExpires的值为服务端返回的到期时间,即下一次请求时,请求时间小于服务端返回的到期时间,直接使用缓存数据;2.1.2Cache-Control属性说明private客户端可以缓存public客户端和代理服务器都可缓存max-age=xxx缓存的内容将在 xxx 秒后失效no-cache需

2021-08-15 23:54:13 60

原创 xss 和 csrf

一、XSS1.原理恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页面时,嵌入Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。2.分类2.1反射性①步骤攻击者构造出特殊的 URL,其中包含恶意代码。用户打开带有恶意代码的 URL 时,网站服务端将恶意代码从 URL 中取出,拼接在 HTML 中返回给浏览器。用户浏览器接收到响应后解析执行,混在其中的恶意代码也被执行。恶意代码窃取用户数据并发送到攻击者的网站,或者冒充用户的行为,调用目标网站接口执行攻击者指

2021-08-15 23:51:32 160

原创 后台管理系统(含源码)

后台管理系统https://gitee.com/hu-shaobin/php-projects 源码地址文章目录后台管理系统1.前期准备1.1需要资源1.2安装thinkphp51.3安装layui1.4配置域名1.5查询语句封装2.登录页面2.1用户表2.2创建入口文件2.3验证码的安装与配置2.4回车登录2.5点击刷新验证码3.后台首页3.1布局3.2功能3.3阻止非法用户访问4.管理员管理4.1管理员列表5.权限管理5.1菜单管理5.2角色管理6.系统管理(未完善)6.1网站设置7.标

2021-06-21 20:04:07 7062 2

原创 thinkphp 短信api接口调用

thinkphp 短信api接口调用https://docs.topthink.com/think-api/2203721购买短信接口2选择套餐3.我的服务->短信服务,申请签名和模板,具体要求查看文档。4.申请成功如下:5.调用api首先需要在你的项目里面安装think-api库(适用于任何PHP5.6+项目,对框架没有任何要求)。composer require topthink/think-api6.测试<?phpnamespace app\api\con

2021-06-20 13:59:13 655 3

原创 php调用支付宝支付接口操作(沙箱环境)

php调用支付宝支付接口操作(沙箱环境)1.首先扫码登录支付宝个人主页点击开发平台2.点击开发服务进入找到沙箱环境 (appid和支付宝网关要填到config.php)3.应用中选择电脑网站支付,然后选择demo下载4.下载完毕解压后将文件复制到WWW目录下,新建站点,进行访问。回到沙箱应用,开始配置文件,首先将APPID和支付宝网关填写到config.php文件中生成商户私钥和支付宝公钥.7. 填入对应的公钥和密钥访问新建站点,点击付款,可跳转到支付界面

2021-06-09 12:07:45 765

原创 内网穿透(实现外网访问内网)

搭建内网穿透通过natapp、花生壳等穿透工具就可以把你的电脑映射到外网上,这样你只需要在你本地搭建好服务器运行环境,外网就可以访问你的项目了,就不需要购买服务器。哪怕是公司有自己的服务器,往往也是通过内网穿透的方式来测试开发。这里我们使用natapp来做内网穿透,具体步骤如下:首先到natapp官网,注册一个账号,注册成功之后进行实名认证,否则是不允许使用的:实名认证通过之后,就会给你提供一个免费的隧道,免费隧道每次穿透的域名是随机的。然后点击右上角的“客户端下载”,选择你要下载的

2021-06-05 14:46:25 1380

原创 thinkPHP 调用邮箱接口发送验证码

thinkPHP 调用邮箱接口发送验证码一 、安装phpmailercomposer require phpmailer/phpmailer二 、开启服务,记得保留授权密码。三、测试(member/account控制器下)use PHPMailer\PHPMailer\PHPMailer;public function sendmail(){ $to='1359522499@qq.com'; $title='PHP商城验证码';

2021-06-05 14:39:59 365

原创 mysql索引及其优化

测试数据个数要大于2个“索引(在MySQL中也叫“键key”)是存储引擎快速找到记录的一种数据结构。”一、索引类型:1.1索引类型:可以使用SHOW INDEX FROM table_name;查看索引详情1.2索引创建索引类型特点插入PRIMARY KEY(主键索引)它是一种特殊的唯一索引,不允许有空值。ALTER TABLE table_name ADD PRIMARY KEY ( col )UNIQUE(唯一索引)与"普通索引"类似,不同的就是:索引列

2021-03-25 21:30:18 150

原创 redis缓存雪崩,缓存穿透,缓存击穿

1.redis和mysql数据的关系2.缓存雪崩2.1概念当某一个时刻出现大规模的缓存失效的情况,那么就会导致大量的请求直接打在数据库上面,导致数据库压力巨大,如果在高并发的情况下,可能瞬间就会导致数据库宕机。2.2分析造成缓存雪崩的关键在于在同一时间大规模的key失效。第一种可能是Redis宕机,第二种可能是采用了相同的过期时间。2.3解决方案2.3.1在可接受的时间范围内随机设置key的过期时间,分散key的过期时间,以防止大量的key在同一时刻过期2.3.2延长热点key的过期时间

2021-03-21 15:05:40 78

原创 redis实现限流

redis实现限流(list数据结构和令牌桶算法)1.基于Redis的数据结构list1.1实现流程我们可以将请求打造成一个list列表,当每一次请求进来的时候,value用当前时间戳表示。可以清楚判断一段时间的访问次数是否超过限制。2.代码实现<?php /** * 限流:一分钟一个ip只能访问10次 * * */ $redis=new redis(); $redis->connect('127.0.0.1',6379

2021-03-21 15:03:14 178

原创 redis乐观锁

redis乐观锁1.事务本质:一组命令的集合!一个事务中的所有命令都会被序列化,在事务执行过程中,都会按照顺序执行!Redis的事务开启事务(multi)命令入队(所有命令…)执行事务(EXEC)2.乐观锁很乐观,认为什么时候都不会出问题,所以不会上锁!更新数据的时候去判断一下,在此期间是否有人修改过这个数据,MySql中添加version 字段进行比对!获取version更新的时候比较versio3.watch监听客户端A客户端B

2021-03-17 22:48:44 46

原创 php session 和cookie 实现登录过期

php session 和cookie 实现登录过期cookie 和session 的区别1、cookie数据存放在客户的浏览器上,session数据放在服务器上,所以session的安全性要高于cookie。2、再者,我们获取的session里的信息是通过存放在cookie里的sessionId获取的3、因为session是存放在服务器里的,所以session 里的东西不断增加会增加服务器的负担,我们会把一些重要的东西放在session里,不太重要的放在客户端cookie里4、cooki

2021-03-16 21:57:53 434

原创 redis+lua分布式锁(秒杀抢票场景)

redis分布式锁一、方案方案实现原理优点缺点redis命令1. 加锁:执行setnx,若成功再执行expire添加过期时间2. 解锁:执行delete命令实现简单,相比数据库和分布式系统的实现,该方案最轻,性能最好1.setnx和expire分2步执行,非原子操作;若setnx执行成功,但expire执行失败,就可能出现死锁2.delete命令存在误删除非当前线程持有的锁的可能3.不支持阻塞等待、不可重入redis Lua脚本能力1. 加锁:执行SET lock_

2021-03-16 17:20:06 521

原创 文件上传漏洞(.user.ini和.htaccess)

文件上传漏洞(.user.ini和.htaccess )一 、user.ini.user.ini实际上就是一个可以由用户“自定义”的php.ini,我们能够自定义的设置是模式为“PHP_INI_PERDIR 、 PHP_INI_USER”的设置。实际上,除了PHP_INI_SYSTEM以外的模式(包括PHP_INI_ALL)都是可以通过.user.ini来设置的。​ 和php.ini不同的是,.user.ini是一个能被动态加载的ini文件。也就是说我修改了.user.ini后,不需要重启

2020-12-23 09:32:08 1524 1

原创 sql 报错注入

sql报错注入​ 报错注入就是利用了数据库的某些机制,人为地制造错误条件,使得查询结果能够出现在错误信息中。xpath语法错误(局限性)extractvalue负责在xml文档中按照xpath语法查询节点内容,updatexml则负责修改查询到的内容:updatexml函数原型:updatexml(xml_document,xpath_string,new_value)正常语法:updatexml(xml_document,xpath_string,new_value)第一个参数

2020-12-22 09:33:32 187

原创 ctf web 文件包含漏洞(例题)

文件包含漏洞php://协议php://filter和php://input,php://filter用于读取源码,php://input用于执行php代码。一、php://filter当它与包含函数结合时,php://filter流会被当作php文件执行。所以我们一般对其进行base64编码,阻止其不执行。从而导致任意文件读取。http://127.0.0.1/cmd.php?file=php://filter/read=convert.base64-encode/resource=index.

2020-11-29 22:29:35 3751

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除