引言

  • 今天的练习比较轻松,原本是有两题的,但是第一题那个大致看了一下,其实和之前的6个练习差不多,就是把xls中的文件数据读取出来后,进行一下处理,对于那题而言就是一个求和操作,所以就没练了,所以今天的主要对象是第21题
  • 这题是需要我们对于一个密码进行加密操作,由于在比赛中做密码比较多的原因,这题难度其实就没那么大了,主要涉及的库有hashlibhamc

题目分析

  • 作为了解,我们应该知道,当我们注册了一个平台的账户时,我们存储的密码在后端的数据库中,是以一串哈希摘要的形式存储的,这样保证了即使是存储方也无法获取用户的明文密码(但是他还是可以登录你的平台账户,因为常规来说,登录就是用着摘要来验证的),从而保证了信息的安全性
  • 对于哈希函数,我们一般常用的有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位做为密码,长度上已符合

最新文章

  1. 第21天 fastlane
  2. JDBC性能分析与优化
  3. 如何在64位windows7上同时使用32位和64位的Eclipse
  4. css2---必须学的经典---定位问题
  5. Knockout应用开发指南 第三章:绑定语法(3)
  6. jquery的img的动态title换行
  7. Maven 手动添加selenium JAR 包到本地仓库
  8. Python学习 - 输入和输出
  9. 【一天一道LeetCode】#50. Pow(x, n)
  10. Maven(十一)导入手动创建的Maven 工程
  11. 获取sd卡空间大小和获取sd卡目录
  12. bsp 总结
  13. Python学习(四) —— 编码
  14. hdu 2181 哈密顿绕行世界问题【DFS】
  15. C#微信公众号开发--网页授权(oauth2.0)获取用户基本信息一
  16. 【bzoj2653】【middle】【主席树+二分答案】
  17. 解决webgl使用canvas.toDataURL()没有内容的问题
  18. VxWorks笔记
  19. 小程序开发 js里面array操作的方法列表。
  20. 25个Web前端开发工程师必看的国外大牛和酷站

热门文章

  1. 题目分享F 二代目
  2. Https双向验证与Springboot整合测试-人来人往我只认你
  3. 简单使用媒体查询@media
  4. C语言设计实验报告(二)
  5. Android P HIDL demo代码编写 (原创)
  6. qt creator源码全方面分析(4-5)
  7. Facebook 开源微光效果 Shimmer
  8. 【Kafka】Flume整合Kafka
  9. Go实战面试备忘录
  10. 第一章 Windows内核概述