字典攻击

Python编程:从入门到实践

坚强是说给别人听的谎言 提交于 2020-01-20 04:55:59
Appendix 1.代码规范 1.1函数编写规范 函数名使用小写字母和单词之间下划线。应给函数指定描述性名称。模块命名也是 每个函数应有简要的DocStrings注释 每个函数都应包含简要地阐述其功能的注释,该注释应紧跟在函数定义后面,并采用文档字符串格式。 DocStrings 文档字符串 给形参指定默认值时,等号两边不要有空格,对于函数调用中的关键字实参,也应遵循这种约定: 在左括号后换行,是函数形参过长的处理办法。 每行代码长度不要超过这根竖线 1.2 类编写规范 类的名称每个单词首字母大写且不使用下划线,实例名和模块名都采用小写格式,并在单词之间加上下划线。 每个类紧跟定义后包含一个文档字符串描述类的功能 可使用一个空行来分隔方法;而在模块中,可使用两个空行来分隔类。 需要同时导入标准库中的模块和你编写的模块时,先编写导入标准库模块的import 语句,再添加一个空行,然后编写导入你自己编写的模块的import 语句。 1.3 测试类、测试函数编写规范 单元测试 是测试函数某一方面是否有问题 测试用例 是一组单元测试 全覆盖式测试 是一整套单元测试 类名包含字样Test 方法名必须以test_打头,这样它才会在我们运行test_name_function.py时自动运行。 1.4 通过空行,划分程序 要将程序的不同部分分开,可使用空行。你应该使用空行来组织程序文件

这26个为什么,让初学者理解Python更简单!

柔情痞子 提交于 2020-01-07 04:13:50
为什么Python使用缩进来分组语句? 为什么简单的算术运算得到奇怪的结果? 为什么浮点计算不准确? 为什么Python字符串是不可变的? 为什么必须在方法定义和调用中显式使用“self”? 为什么不能在表达式中赋值? 为什么Python对某些功能(例如list.index())使用方法来实现,而其他功能(例如len(List))使用函数实现? 为什么 join()是一个字符串方法而不是列表或元组方法? 异常有多快? 为什么Python中没有switch或case语句? 难道不能在解释器中模拟线程,而非得依赖特定于操作系统的线程实现吗? 为什么lambda表达式不能包含语句? 可以将Python编译为机器代码,C或其他语言吗? Python如何管理内存? 为什么CPython不使用更传统的垃圾回收方案? CPython退出时为什么不释放所有内存? 为什么有单独的元组和列表数据类型? 列表是如何在CPython中实现的? 字典是如何在CPython中实现的? 为什么字典key必须是不可变的? 为什么 list.sort() 没有返回排序列表? 如何在Python中指定和实施接口规范? 为什么没有goto? 为什么原始字符串(r-strings)不能以反斜杠结尾? 为什么Python没有属性赋值的“with”语句? 为什么 if/while/def/class语句需要冒号?

Kali 系统自带字典目录wordlists

落爺英雄遲暮 提交于 2019-12-28 01:43:45
路径:/usr/share/wordlists/ dirb big.txt #大的字典 small.txt #小的字典 catala.txt #项目配置字典 common.txt #公共字典 euskera.txt #数据目录字典 extensions_common.txt #常用文件扩展名字典 indexes.txt #首页字典 mutations_common.txt #备份扩展名 spanish.txt #方法名或库目录 others #扩展目录,默认用户名等 stress #压力测试 vulns #漏洞测试 dirbuster apache-user-enum-** #apache用户枚举 directories.jbrofuzz #目录枚举 directory-list-1.0.txt #目录列表大,中,小 big,medium,small fern-wifi common.txt #公共wifi账户密码 metasploit … #各种类型的字典 webslayer general #普通字典目录 admin-panels.txt #后台路径 字典 …. Injections #注入字典目录 All_attack.txt #全部攻击 bad_chars.txt #字符注入 SQL.txt #sql注入 Traversal.txt #路径回溯 XML.txt #xml注入

如何正确对用户密码进行加密?转自https://blog.csdn.net/zhouyan8603/article/details/80473083

时间秒杀一切 提交于 2019-12-23 04:27:12
本文介绍了对密码哈希加密的基础知识,以及什么是正确的加密方式。还介绍了常见的密码破解方法,给出了如何避免密码被破解的思路。相信读者阅读本文后,就会对密码的加密有一个正确的认识,并对密码正确进行加密措施。 作为一名Web开发人员,我们经常需要与用户的帐号系统打交道,而这其中最大的挑战就是如何保护用户的密码。经常会看到用户账户数据库频繁被黑,所以我们必须采取一些措施来保护用户密码,以免导致不必要的数据泄露。 保护密码的最好办法是使用加盐密码哈希( salted password hashing)。 重要警告: 请放弃编写自己的密码哈希加密代码的念头 !因为这件事太容易搞砸了。就算你在大学学过密码学的知识,也应该遵循这个警告。所有人都要谨记这点:不要自己写哈希加密算法! 存储密码的相关问题已经有了成熟的解决方案,就是使用 phpass ,或者在 defuse/password-hashing 或 libsodium 上的 PHP 、 C# 、 Java 和 Ruby 的实现。在对密码进行哈希加密的问题上,人们有很多争论和误解,可能是由于网络上有大量错误信息的原因吧。对密码哈希加密是一件很简单的事,但很多人都犯了错。本文将会重点分享如何进行正确加密用户密码。 密码哈希是什么? hash("hello") =

网络编程

百般思念 提交于 2019-12-04 23:13:00
目录 一、网络编程大体图 二、TCP协议 1.三次握手,四次挥手图 2.tcp代码 1.简单版 2.电影上传 3.json补充,序列化类 4.subprocess补充 三、UDP的使用 1.简介 2.使用基本代码 2.1简易版qq 四、UDP和TCP的区别 [doc] 一、网络编程大体图 二、TCP协议 TCP协议又叫:流失协议、可靠协议 1.TCP协议像流水一样一直发送,一直接收 2.TCP协议可靠的原因:有反馈机制(发送一句,回复一句才会发送下一句) 洪水攻击:同一时间发送给服务器大量请求 1.三次握手,四次挥手图 2.tcp代码 1.简单版 服务端: import socket server = socket.socket() # 生成对象 server.bind(('127.0.0.1', 8080)) # 绑定IP和端口 (自己的) server.listen(5) # 半连接池,允许等待数 conn, addr = server.accept() # 等待接听 # conn:地址 addr:端口号(随机分配) while True: data = conn.recv(1024) # 接收 print(data) # 打印接收的内容 # 判断如果接收的是空,就跳出循环 if len(data) == 0: break conn.send(data.lower()) #

Redis 存储结构设计

匿名 (未验证) 提交于 2019-12-03 00:44:02
Base 2.8.7 Redis是一个包含了很多Key-Value对的大字典,这个字典支持的Value非常丰富,可以为 字符串、哈希表、列表、集合和有序集 ,基于这些类型丰富的value,扩展出了功能强大的操作,例如hmset、lpush、sadd等 字典 字典是Redis最基础的数据结构,一个字典即一个DB,Redis支持多DB Redis字典采用 Hash表 实现,针对碰撞问题,其采用的方法为 “ 链地址法 ” ,即将多个哈希值相同的节点串连在一起, 从而解决冲突问题。 “链地址法”的问题在于当碰撞剧烈时,性能退化严重,例如:当有n个数据,m个槽位,如果m=1,则整个Hash表退化为链表,查询复杂度O(n) 为了避免Hash碰撞攻击,Redis随机化了Hash表种子 Redis的方案是 “双buffer” ,正常流程使用一个buffer,当发现碰撞剧烈(判断依据为当前槽位数和Key数的对比),分配一个更大的buffer,然后 逐步 将数据从老的buffer迁移到新的buffer。 Redis字典结构如下: typedef struct dict { dictType *type; void *privdata; dictht ht[2]; //双buffer int rehashidx; int iterators; } dict; typedef struct dictht

底层:字典

点点圈 提交于 2019-11-29 15:45:11
底层:字典 字典是redis整个映射的基础,hash结构依赖字典,zset中member到score的映射也是通过字典。set的底层也是字典,只不过value是null。 一个字典内部实际包含两个hashtable,因为扩容缩容需要渐进式hash迁移。hashtable是由数组加链表组成。 渐进式hash 在渐进式rehash时,搬迁操作在对字典的后序指令中触发,如果没有的话也会进行定时任务。 在扩容时如果redis正在bgsave(后台异步保存数据到磁盘),为了尽量少的页面分离,就会尽量不扩容,除非hash表已经很拥挤了。缩容时不用顾忌bgsave。 遍历方式 在遍历时字典要先遍历旧的,再遍历新的。遍历的迭代器有两种:安全迭代器和不安全迭代器。 安全迭代器遍历过程中可以对字典进行查找和修改,且元素不会出现重复,在安全遍历时会阻止字典rehash,在keys指令执行时采用安全迭代器,因为不允许出现重复元素,涉及持久化的操作也会使用安全迭代器。 不安全迭代器只能对字典进行查找,元素可能重复,不会阻止rehash,如scan命令。 hash算法 redis的hash算法采用一种siphash算法,这种算法有效的抵御了hash flooding攻击,降低hash函数的偏向性,即使key很小结果差别也很巨大。(还有一种常用的hash算法是MD5) 来源: https://www

第十三章 密码破解

这一生的挚爱 提交于 2019-11-29 08:12:41
思路 目标系统实施了强安全措施   – 安装了所有补丁   – 无任何已知漏洞   – 无应用层漏洞   – 攻击面最小化 社会工程学 获取目标系统用户身份   – 非授权用户不受信,认证用户可以访问守信资源   – 已有用户账号权限受限,需要提权   – 不会触发系统报警 身份认证方法 证明你是你声称你是的那个人   – 你知道什么(账号密码、pin、passphrase)   – 你有什么(令牌、token、key、证书、密宝、手机)   – 你是谁(指纹、视网膜、虹膜、掌纹、声纹、面部识别)   – 以上方法结合使用(多因素身份认证) 基于互联网的身份验证仍以账号密码为主要形式 密码破解方法 人工猜解   – 垃圾桶工程   – 被动信息收集 基于字典暴力破解(主流) 键盘空间字符暴破 字典   – 保存有用户名和密码的文本文件   – /usr/share/wordlist   – /usr/share/wfuzz/wordlist   – /usr/share/seclists 字典 键盘空间字符爆破   – 全键盘空间字符   – 部分键盘空间字符 (基于规则)   – 数字、小写字母、大写字母、符号、空格、瑞典字符、高位ASCII码 crunch <min-len> <max-len> [<charset string>] [options]   – <charset

Django 视图 views.py

大城市里の小女人 提交于 2019-11-27 06:25:32
一 . Django 视图 views.py 1 .视图(views)简介 一个视图函数(类),简称视图,是一个简单的Python 函数(类),它接受Web请求并且返回Web响应。 响应可以是一张网页的HTML内容,一个重定向,一个404错误,一个XML文档,或者一张图片。 无论视图本身包含什么逻辑,都要返回响应。代码写在哪里也无所谓,只要它在你当前项目目录下面。除此之外没有更多的要求了——可以说“没有什么神奇的地方”。为了将代码放在某处,大家约定成俗将视图放置在项目(project)或应用程序(app)目录中的名为 一个简单的视图from django.http import HttpResponse import datetime def current_datetime(request): now = datetime.datetime.now() html = "<html><body>It is now %s.</body></html>" % now return HttpResponse(html) 2. 核心对象 http请求:HttpRequest对象 所有的属性应该被认为是只读的,除非另有说明。 request实际上就是HttpRequest类的实例化化对象 在实际使用的时候都是用 request. 属性:   django将请求报文中的请求行、头部信息

Socket 套接字和解决粘包问题

允我心安 提交于 2019-11-26 10:33:46
---恢复内容开始--- Socket 套接字: 什么是socket: Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实 就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口 就是全部,让Socket去组织数据,以符合指定的协议。 socket在OSI模型中的位置 二为什么需要socket 在标准的OIS模型中并没有规定说必须有socket层,也就是说不使用socket也能完成通讯,是的,的确如此! 那为什么需要socket呢?一个字 懒,程序员都是懒的! 我们发现还没有开始实现应用程序逻辑,就需要花大把时间来实现各种协议,太特么费事儿了,就有人专门把协议中一堆复杂的事情进行了封装,于是socket就诞生了! 有了socket以后,无需自己编写代码实现三次握手,四次挥手,ARP请求,打包数据等等,socket已经封装好了,只需要遵循socket的规定去编程,写出的程序自然就是遵循tcp/udp标准的。 三socket的发展: 套接字起源于 20 世纪 70 年代加利福尼亚大学伯克利分校版本的 Unix,即人们所说的 BSD Unix。 因此,有时人们也把套接字称为“伯克利套接字”或“BSD 套接字”。一开始,套接字被设计用在同 一台主机上多个应用程序之间的通讯