zoukankan      html  css  js  c++  java
  • 函数和常用模块【day06】:hashlib模块(十三)

    本节内容

    1、简述

    2、加密

    3、sha1加密

    4、sha256加密

    5、sha384加密

    6、sha512加密

    7、hmac加密

    一、简述

      我们写程序中,经常需要对字符串进行MD5加密,python中也支持这种加密,下面说说,这个加密模块:hashlib。

    二、MD5加密

      原则:只要你的输入是固定的,你的输出也一定是固定的。MD5是在hash上更改的,主要做文件的一致性

    1、md5加密

    import hashlib
    
    m = hashlib.md5()  # 创建一个MD5对象
    m.update(b"luo")  # 在python3中需要是2进制的值,所以字符串前加b
    print(m.hexdigest())  # 以16进制打印MD5值
    # 输出
    6aaf8fc5fa8975075a1e8a40dc48cebd
    
    m.update(b"ahong")
    print(m.hexdigest())
    # 输出
    be960d8f1a5d67f846c6dbc0b96eecf0

    2、文件内容MD5值

    说明:如果我们想得到一个文件所有内容的MD5值,我们所做的方法是循环这个文件,获取每行的MD5值,但是这样生成的MD5值的效率会变慢,因为每一行都需要计算。这样我们还不如直接把文件的所有内容加载出来,直接计算它的MD5值,这样反而快些。

    代码如下:

    import hashlib
    
    m = hashlib.md5()  # 创建MD5对象m
    m.update(b"luo")
    print(m.hexdigest())
    # 输出
    d0cd2693b3506677e4c55e91d6365bff
    m.update(b"ahong")
    print(m.hexdigest())
    # 输出
    fe18f0149aadc1c13966429475469886
    m2 = hashlib.md5()  # 创建MD5对象m2
    m2.update(b"luoahong")
    print(m2.hexdigest())
    # 输出
    be960d8f1a5d67f846c6dbc0b96eecf0

     注:由上面的代码可以看出,你读到最后一行的字符串的MD5值跟一下子读取所有内容的MD5值是一样的,这是为什么呢?其实这边update做了一个拼接功能,m.update(b"luo")是返回的字符串"luo"的MD5值,但是到了第二个m.update("ahong")的值并不是"ahong"的字符串的MD5值,它需要拼接前面的字符串,应该是m.update(b"luoahong")的MD5值,所以相当于m.update(b"luo"),m.update(b"ahong") = m.update(b"luo"+b"ahong")。

    三、sha1加密

    import hashlib
    
    hash = hashlib.sha1()
    hash.update(b"luoahong")
    print(hash.hexdigest())
    
    输出:
    3794054be86aa55b866358a18fc5443a093c2cd2

    四、sha256加密

    import hashlib
    
    hash = hashlib.sha256()
    hash.update(b"luoahong")
    print(hash.hexdigest())
    输出:
    672960c40fde5d2cbfb7c1fe6e90fc9ca9838fb976b24db58890526553fdeeed

    五、sha384加密

    说明:sha256用的比较多,相比MD5要更加的安全

    import hashlib
    
    hash = hashlib.sha384()
    hash.update(b"luoahong")
    print(hash.hexdigest())
    输出:
    
    37ad112292553999c07aa79bbc8cd752d5dec7cc084e28f1fd07ebf3cb931265b09caa597a9c0d7edeff98c63b3f0759

    六、sha512加密

    import hashlib
    
    hash = hashlib.sha512()
    hash.update(b"luoahong")
    print(hash.hexdigest())
    输出:
    2a81f4d9fb328b6da4daf0af47feb86beadf2bf01d3a0ae5bb459e9dd8f3f9a02a9b8b5cf9124b24470480a86601357b720a6749f1d692585c8d73eb004accdc

    注意:

    1. 以上这几种,其实都是对MD5加密的不同算法
    2. 其中sha256用的最多,比MD5要安全的多
    3. 有些公司会用加盐方式加密,比如:把字符串"luoahong",通过一定的算法变成"luo.a.hong",当然这种算法自己肯定要知道,然后MD5加密,当然每个公司的加盐方式是不一样的。

    七、hmac加密

    其实以上还不是最牛的,最牛的是下面这种,叫hmac加密,它内部是对我们创建key和内容进行处理再进行加密。

    散列消息鉴别码,简称HMAC,是一种基于消息鉴别码MAC(Message Authentication Code)的鉴别机制。使用HMAC时,消息通讯的双方,通过验证消息中加入的鉴别密钥K来鉴别消息的真伪;

    一般用于网络通信中消息加密,前提是双方先要约定好key,就像接头暗号一样,然后消息发送把用key把消息加密,接收方用key + 消息明文再加密,拿加密后的值 跟 发送者的相对比是否相等,这样就能验证消息的真实性,及发送者的合法性了。

    代码如下:

    import hmac  # 导入hmac模块
    
    hash = hmac.new(b"luo", b"ahong")  
    print(hash.hexdigest())
    输出:
    f511394412d4c51ec1373afa4f9ad629
  • 相关阅读:
    线程执行android的looper,handler消息小结
    类型对象phonegap入门10 Contacts
    域名查询普及一下域名知识
    类数据[Android Training视频系列] 6.3 Saving Data in SQL Databases(保存数据到SQLite)
    概率初始化hdu 2955 (01背包变形)
    类最大hdu 1792 A New Change Problem
    标签定义jQuery 入门教程(41): jQuery UI Tab 示例(一)
    nullnullOptimizing Navigation for TV 优化电视导航
    nullnullHandling Features Not Supported on TV 在电视上处理不支持的功能
    nullnullLoading Large Bitmaps Efficiently 有效的处理较大的位图
  • 原文地址:https://www.cnblogs.com/luoahong/p/9890960.html
Copyright © 2011-2022 走看看