zoukankan      html  css  js  c++  java
  • (十九)hashlib模块

    hashlib模块用于加密相关的操作,3.x里代替了md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法

    注意:md5和sha256算法都是单向加密,即明文加密为密文后,密文无法再解密回明文

    适合应用场景:用户的密码需要加密后才能入库

    import hashlib
    m = hashlib.md5()                      #使用md5算法,没有加盐;如果是sha256算法:hashlib.sha256()
    m.update('hello'.encode('utf8'))       #对'hello'加密
    print(m.hexdigest())                   #打印加密后的密文
    
    m1 = hashlib.md5()
    m1.update('hello'.encode('utf8'))
    print(m1.hexdigest())
    结果:

    5d41402abc4b2a76b9719d911017c592
    5d41402abc4b2a76b9719d911017c592

    可见,通过这种方式,一个不定长的字符串可以加密变为一个定长的密文,而这个明文和密文永远是一一对应的关系,即'hello'通过md5加密后的密文一定是5d41402abc4b2a76b9719d911017c592

    有人把这种一一对应的关系收集记录(特别是常用的字符串),放入一个数据库,通过撞库就可以解密MD5,比如我们常用的https://www.cmd5.com/

    所以有必要对加密算法中添加自定义key再来做加密,即加盐

    m = hashlib.md5('nba'.encode('utf8'))     #'nba'就是加盐,没有加盐的时候hashlib.md5()方法不带参数
    m.update('hello'.encode('utf8'))
    print(m.hexdigest())
    结果:444d0cc8a2d942f881bc85f5a31eced0

    用上面这个密文结果去https://www.cmd5.com/解密是无法得到明文的

     需要注意的是,同一个hashlib对象的加密是连续叠加的:

    m = hashlib.md5()
    m.update('hello'.encode('utf8'))      #m对象先对'hello'加密
    print(m.hexdigest())                  #这个密文是'hello'的
    m.update('nick'.encode('utf8'))       #m对象再对'nick'加密
    print(m.hexdigest())                  #这个密文不是'nick'的,而是'hellonick'的
    
    m2 = hashlib.md5()
    m2.update('hellonick'.encode('utf8'))
    print(m2.hexdigest())
    结果:

    5d41402abc4b2a76b9719d911017c592
    d29690d65b7fdc3308b016f7a26cde94
    d29690d65b7fdc3308b016f7a26cde94

  • 相关阅读:
    ajax提交表单,包括跳入的坑!
    js继承
    文本的选取和复制
    js 绑定的键盘事件
    webpack的使用 一、webpack 和webpack的安装
    json转化为C#、Java、TypeScript、VisualBasic、Python实体类
    ASP.NET MVC Route详解
    .net面试技术要点总结
    C#利用反射实现简单记事本功能插件
    ASP.NET网页请求以及处理全过程(反编译工具查看源代码)
  • 原文地址:https://www.cnblogs.com/xulan0922/p/10312171.html
Copyright © 2011-2022 走看看