文件md5校验
从网络上下载大文件时,官网一般都会提供一个MD5、SHA1或SHA256值,这是用来校验文件完整性的。因为从网络上下载大文件具有不确定性,可能会受很多因素影响,比如网络抖动导致文件下载不完成,文件被恶意篡改等,这些问题都会导致最终下载的文件无法正常使用。 针对小文件(<500MB)直接以二进读模式(rb)加载进来,然后计算。 123456789101112import hashlibdef encrypt(fpath: str, algorithm: str) -> str: with open(fpath, 'rb') as f: return hashlib.new(algorithm, f.read()).hexdigest()if __name__ == '__main__': for algorithm in ('md5', 'sha1', 'sha256'): hexdigest = encrypt('test.f...
获取exe文件图标
lnk文件图标需要找到对应的exe文件所在真实路径才能获取图标,不能够直接获取。dll与没有指定图标的exe文件获取图标会报错。 1234567891011121314151617181920212223242526272829303132333435363738import win32guiimport win32uifrom PIL import Imageimport win32com.clientdef pra_lnk(file_path:str): """解析lnk文件""" shell = win32com.client.Dispatch("WScript.Shell") shortcut = shell.CreateShortCut(file_path) return shortcut.Targetpathdef get_ico_from_exe(file_path:str): """获取exe的ico图标""...
docker更换国内源
由于Docker的官方默认源在海外,导致了国内服务器使用Docker默认源拉取镜像速度不理想,甚至直接失败等问题,造成了不小的困扰。 解决方式很简单,可以使用国内提供的docker镜像源加速: 123456789# 网易163https://hub-mirror.c.163.com# 中国科学技术大学https://docker.mirrors.ustc.edu.cn# 阿里云https://<你的ID>.mirror.aliyuncs.com# 腾讯云内网https://mirror.ccs.tencentyun.com 下面以网易163源为实例 一、适用于基于 Ubuntu 操作系统的实例:1、执行以下命令,打开 /etc/default/docker 配置文件 1vim /etc/default/docker 2、按 i 切换至编辑模式,添加以下内容,并保存 1DOCKER_OPTS="--registry-mirror=https://hub-mirror.c.163.com" 3、执行以下命令,重启 Docker 即可。 1sud...
python代码加密
之前工作中需要使用到对python代码进行加密,因为许多核心代码设计到重要信息,不能暴露给客户。但是python作为一种脚本语言,既要保证运行部署方便又要考虑到代码破译的安全性问题。 编译加密编译加密就是常见的将python代码编译成为以后缀.pyc的文件,虽然不影响使用与部署,但是可以被反编译,直接使用uncompyle库进行反编译即可得到结果 代码混淆代码混淆在我之前的记录当中提起过,网站 优点: 简单 不可逆 不影响逻辑 缺点: 对于项目来说不友好 混淆不可控 逻辑依然可读 打包成exe文件python可以使用pyinstaller将文件打包成exe文件,但是对于项目部署来说几乎全是缺点: 内部路径找不到 资源文件不好打包 部署使用麻烦 难以控制 生成使用 Cython它的原理:将 .py/.pyx 编译为 .c文件,再将 .c文件编译为 .so(Unix) 或 .pyd(Windows) 1pip install Cython 优点: 不可逆 不影响使用 缺点: 打包麻烦 维护麻烦 PyArmor这是一个python代码加密库,不影响项目结...
Too many open files 解决办法
近期使用Linux操作系统的时候用到了多进程,导致同一时间内文件打开数量超过限制,从而导致进程卡死问题,在网上找到了以下解决方法 单个进程打开文件句柄数过多ulimit中的nofile表示单进程可以打开的最大文件句柄数,可以通过ulimit -a查看,子进程默认继承父进程的限制(注意,是继承,不是共享,子进程和父进程打开的文件句柄数是单独算的)。网上还有一种解读是nofile表示单用户可以打开的文件句柄数,因为他们在limit.conf中看到类似于openstack soft nofile 65536,便认为是openstack用户最多可以打开的文件句柄数。该解读是错误的,openstack soft nofile 65536表示的含义是当你执行su - openstack切换到openstack用户后,你创建的所有进程最大可以打开的文件句柄数是65536。要查看一个进程可以打开的文件句柄数,可以通过cat /proc/<pid>/limits查看。 要修改ulimit中的nofile,可以通过修改/etc/security/limits.conf文件,在其中加入类似...
git提交规范问题
一直以来个人提交git都是做了啥直接写啥,虽然尽可能的写得很详细但是时间一久难免忘记当时到底是做什么功能。受到同事的提醒,他将他使用的git提交规范推荐给了我,使用了一段时间后感觉确实工作内容看起来更加清晰了,虽然只是几个简单规范,但是受益匪浅。 git 提交规范为什么要制定提交规范? 便于程序员对提交历史进行追溯,了解发生了什么情况。 一旦约束了 Commit Message ,意味着我们将慎重的进行每一次提交,不能再一股脑的把各种各样的改动都放在一个git commit里面,这样一来整个代码改动的历史也将更加清晰。 格式化的 Commit Message 才可以用于自动化输出 Change log 。 业界通用的Git提交规范: 1<type>(<scope>):<subject> type: 用于说明 Git Commit 的类别,只允许使用下面的标识。 scope: scope用于说明 Commit 影响的范围,比如数据层、控制层、视图层等,视项目不同而不同。 subject: subject是 Commit 目的的简短描述,...
验证码滑块识别
滑块验证码是验证码当中的常见类型,虽然现在有很多种验证码,但是滑块验证依然应用广泛。滑块验证需要根据实际情况进行调整,最好是通过机器学习的方法解决,不然效果可能会因为验证码改变数据从而大大折扣。 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169...
爬虫hook
hook本质上就是重写函数,因为js反爬也是通过重写函数来进行加密或者反爬的。记录两个小脚本用于hook,虽然我早已经不从事爬虫工作,唉~! 12345678910111213141516171819202122232425262728293031323334353637383940414243f = FunctionFunction = function(a){ if (a!=='debugger'){return f(a)}}Function.prototype.constructor_ = Function.prototype.constructor;Function.prototype.constructor = function(x){ if (x!=='debugger'){return Function.prototype.constructor_(x)}}eval_ = eval;eval = function(a){ ...
孩子是谁的?
在经典的一则故事中,一个小孩子因为被人遗失所以从小在富家长大,而后富家主人死去孩子还尚不醒事,更不记得生母是谁。知县为了找到谁是孩子的母亲于是发布公告,许久之后两位年龄相仿的女人前来寻子。一位衣着华丽,一位衣衫破败。两人都是声称自己是孩子生母,知县害怕孩子以及富人家产落入歹人之手,于是让两位孩子母亲证明。可是空口无凭谁都无法证明自己才是生母!知县思考良久决定让两位母亲直接争抢孩子,谁抢过了孩子就是谁的。强孩子开始后生母怕孩子在抢夺过程受到伤害主动放手放弃抢夺,由此知县判断出衣衫破烂的女子是孩子生母,并将假冒的恶人压入大牢。故事就此结束!故事告诉了我们很多道理,母爱、人不可貌相、恶人终会受罚等等。。。但是故事真的结束了吗??? 假设在另一个平行世界当中,恶人也学着生母一样放手了,那该怎么办呢?且现在已经没有足够多的证据证明孩子的生母信息了,我们该怎么才能揪出恶人呢? 博弈的思考很多对抗性质的东西都能够使用博弈论来进行求解,要知道,博弈需要的是拉开彼此之间的差距从而达到目的。比如最开始的的方法是考虑到利益最大化,因此贪婪的人不愿意放手,他们想要更多的利益,所以最后才会暴露自己的身份...













