Python 每日一练(7)
引言
- 今天的练习比较轻松,原本是有两题的,但是第一题那个大致看了一下,其实和之前的6个练习差不多,就是把
xls
中的文件数据读取出来后,进行一下处理,对于那题而言就是一个求和操作,所以就没练了,所以今天的主要对象是第21题 - 这题是需要我们对于一个密码进行加密操作,由于在比赛中做密码比较多的原因,这题难度其实就没那么大了,主要涉及的库有
hashlib
和hamc
题目分析
- 作为了解,我们应该知道,当我们注册了一个平台的账户时,我们存储的密码在后端的数据库中,是以一串哈希摘要的形式存储的,这样保证了即使是存储方也无法获取用户的明文密码(但是他还是可以登录你的平台账户,因为常规来说,登录就是用着摘要来验证的),从而保证了信息的安全性
- 对于哈希函数,我们一般常用的有
sha256
,md5
等,这一类函数都有一个共同点就是全是单向函数,即无法根据哈希直接逆推回明文 - 而
Python
中常用的处理哈希的库就是hashlib
了,除此之外,这次练习,我们可以考虑另一个库hmac
- 我们这次去实现加密是利用哈希加盐这种方式,使得在计算哈希的时候,不能仅针对原始输入计算,需要增加一个salt来使得相同的输入也能得到不同的哈希,这样可以确保密码的更加安全,因为黑客对于一些
md5
值,可以利用彩虹表进行逆推出明文,而加了盐之后,使其在不知道salt
的情况下更加无法逆推明文。 - 对于
hashlib
的加密实现加盐仅是这样md5(password+salt)
,而hmac
来实现的话则是把salt看做一个“口令”,加salt的哈希就是:计算一段message的哈希时,根据不通口令计算出不同的哈希。要验证哈希值,必须同时提供正确的口令。 - 这样来说,其实
hmac
更符合我们的要求,但就加密来说,我们使用hashlib
的哪种方式也可以实现了
代码示例:
# -*- coding:utf-8 -*-
# Author:Konmu
'''
通常,登陆某个网站或者 APP,需要使用用户名和密码。
密码是如何加密后存储起来的呢?请使用 Python 对密码加密。
'''
import hashlib
from hmac import HMAC
import random
def Passwd_Encrypt(password,salt=None):
if(salt is None):
salt = ''.join([chr(random.randint(48,122)) for i in range(20)])
safe_pass = hashlib.md5((password+salt).encode('utf-8')).hexdigest()[:10] #hashlib的方式
else:
safe_pass = HMAC(bytes(password.encode('utf-8')),bytes(salt.encode('utf-8')),hashlib.md5).hexdigest()[:10]
#hmac算法实现,这个算法只能处理字节型数据,所以要进行一下类型转换
return(safe_pass)
if __name__ == "__main__":
old_pass = input("Please input your password:")
salt = "iamsalt"
new_pass1 = Passwd_Encrypt(old_pass)
new_pass2 = Passwd_Encrypt(old_pass,salt)
print("Your safe password:",new_pass1)
print("Your safe password:",new_pass2)
加密结果
Please input your password:K0nmua4
Your safe password: ea2cd5c2fb
Your safe password: 1bf06bf616
由于通常我们注册账户使用的密码在8~18位,所以我们这里选择返回前10位做为密码,长度上已符合
Python 每日一练(7)的更多相关文章
- python每日一练:0007题
第 0007 题: 有个目录,里面是你自己写过的程序,统计一下你写过多少行代码.包括空行和注释,但是要分别列出来. # -*- coding:utf-8 -*- import os def count ...
- [python每日一练]--0012:敏感词过滤 type2
题目链接:https://github.com/Show-Me-the-Code/show-me-the-code代码github链接:https://github.com/wjsaya/python ...
- Python 每日一练 | Flask 实现半成品留言板
留言板Flask实现 引言 看了几天网上的代码,终于写出来一个半成品的Flask的留言板项目,为什么说是半成品呢?因为没能实现留言板那种及时评论刷新的效果,可能还是在重定向上有问题 或者渲染写的存在问 ...
- Python 每日一练(5)
引言 Python每日一练又开始啦,今天的专题和Excel有关,主要是实现将txt文本中数据写入到Excel中,说来也巧,今天刚好学校要更新各团支部的人员信息,就借此直接把事情做了 主要对于三种数据类 ...
- Python 每日一练(4)
引言 今天继续是python每日一练的几个专题,主要涵盖简单的敏感词识别以及图片爬虫 敏感词识别 这个敏感词的识别写的感觉比较简单,总的概括之后感觉功能可以简略成if filter_words in ...
- Python 每日一练(3)
引言 今天的每日一练,学习了一下用Python生成四位的图像验证码,就是我们常常在登录时见到的那种(#`O′) 思路分析 正如常见的那种图像验证码,它是由数字和字母的随机组合产生的,所以我们首先的第一 ...
- Python每日一练(1)
这两天在做Python的每日一练,感觉收获颇丰,所以来记录分享一下,一共做了三个,涉及socket,PIL,pymysql三个库,另外终于开始了Flask框架的学习,后续也会做出一些分析 第一个是一个 ...
- Python 每日一练(2)
引言 我又双叒叕的来啦,新博客的第二篇文章,这次是继之前公众号上每日一练的第二个,这次是专题实对于文件的一些处理的练习 主要有以下几类: 1.实现英文文章字频统计 2.统一剪裁某一指定目录下的所有图片 ...
- Python每日一练(1):计算文件夹内各个文章中出现次数最多的单词
#coding:utf-8 import os,re path = 'test' files = os.listdir(path) def count_word(words): dic = {} ma ...
随机推荐
- predixy源码学习--开篇
最近开始研究predixy.predixy是一款高性能全功能redis代理 ,网上有的文章大部分都是功能上的介绍,很少有源码相关的分享. predixy的相关介绍在github: https://gi ...
- 老师,你确定Java注释不会被执行吗?
之前在博客上分享过一篇文章,涉及到 Java 中的注释,就信誓旦旦地写了一句话:"注释是不会被执行的!"结果,有小伙伴留言说,"老师,你确定吗?" 我这个人一直 ...
- 201771030115-牛莉梅 实验一 软件工程准备-<初学《构建之法--现代软件工程》的疑问>
项目 内容 课程班级博客链接 https://edu.cnblogs.com/campus/xbsf/nwnu2020SE 这个作业要求链接 https://www.cnblogs.com/nwnu- ...
- 【Spark】部署流程的深度了解
文章目录 Spark核心组件 Driver Executor Spark通用运行流程图 Standalone模式运行机制 Client模式流程图 Cluster模式流程图 On-Yarn模式运行机制 ...
- 【Scala】什么是隐式转换?它又能用来干嘛?该怎么用
文章目录 定义 隐式参数 隐式转换 隐式值:给方法提供参数 隐式视图 将Int和Double类型转换为String 狗狗学技能(使用别的类中的方法) 使用规则 定义 隐式参数 隐式参数指在函数或者方法 ...
- 一、Spring的控制反转(IOC)学习
一.控制反转 1.什么是控制反转? 控制反转(Inversion of Control,缩写为IoC),是面向对象中的一种设计原则,可以用来减低计算机代码之间的耦合度.其中最常见的方式叫做依赖注入(D ...
- MATLAB1127(传递函数)
sys=tf(400,[1,50,0]) sys = 400 ---------- s^2 + 50 s 其中,tf()函数的用法. 传递函数 dsys=c2d(sys,ts,'z') dsys ...
- python --RecursionError: maximum recursion depth exceeded in comparison
在学习汉娜塔的时候,遇到一个error RecursionError: maximum recursion depth exceeded in comparison 经过百度,百度的方法: 加上: i ...
- 消息队列之Kafka——从架构技术重新理解Kafka
Apache Kafka® 是 一个分布式流处理平台. 这到底意味着什么呢? 我们知道流处理平台有以下三种特性: 可以让你发布和订阅流式的记录.这一方面与消息队列或者企业消息系统类似. 可以储存流式的 ...
- 移动端APP自动化测试超全基础汇总
目录 一.面试过程 1.自动化岗位要求 2.面试流程,面试类型 3.沟通技巧,不同级别要求 二.真实面试案例 1.一个输入框的面试题(有人拿到高级岗位,有人连初级都没拿到,为什么) 三.自我分析 1. ...