zoukankan      html  css  js  c++  java
  • Python 每日一练(7)

    引言

    • 今天的练习比较轻松,原本是有两题的,但是第一题那个大致看了一下,其实和之前的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位做为密码,长度上已符合
    
  • 相关阅读:
    C# 根据URL获取网页截屏
    Django——WEB应用程序(手写程序),HTTP协议,BS CS架构
    jQuery——标签操作之(样式、文本内容、属性、文档处理)操作
    jQuery——简介,使用
    jQuery下载及应用
    javaScript——案例演示:点击有惊喜
    javaScript——案例演示:弹出模态框
    JavaScript——DOM操作+案例演示
    JavaScript——BOM操作
    JavaScript——杂碎小知识
  • 原文地址:https://www.cnblogs.com/Konmu/p/12583998.html
Copyright © 2011-2022 走看看