返回顶部

Python 入门之 内置模块 -- hashlib模块

1、hashlib

摘要算法,加密算法或者叫做哈希算法,散列算法等等

(1)主要用途

<1> 加密 : md5 sha1 sha256 sha512

md5 特点:加密速度快,安全系数低
sha512 特点:加密速度慢,安全系数高

<2> 校验 : md5 sha1 sha256 sha512值

(2)hashlib的特征以及使用要点

<1> bytes类型数据 ---> 通过hashlib算法 ---> 固定长度的字符串

<2> 当要加密的内容相同时,得到的密文一定是一样的

<3> 当明文不一样时,密文不一定一样

<4> 转化过程不可逆

(3)md5加密

<1> 普通加密:

import hashlib

md5 = hashlib.md5()                 # 初始化
md5.update("cai".encode("utf-8"))   # 将明文转换成字节添加到新初始化的md5中
print(md5.hexdigest())              # 进行加密

# 现在可以进行简单的破解  -- 撞库

<2> 加盐加密 -- 提高安全性

加固定盐
import hashlib

md5 = hashlib.md5("mi_key".encode("utf-8"))   # 初始化
md5.update("cai".encode("utf-8"))   # 将明文转换成字节添加到新初始化的md5中
print(md5.hexdigest())   # 进行加密
加动态盐
import hashlib

user = input("username:")
pwd = input("password:")

md5 = hashlib.md5(user.encode("utf-8"))   # 初始化
md5.update(pwd.encode("utf-8"))   # 将明文转换成字节添加到新初始化的md5中
print(md5.hexdigest())   # 进行加密
# 中文内容编码不同时密文是不一致的
import hashlib

sha1 = hashlib.sha1()
sha1.update("加密le".encode("utf-8"))
print(sha1.hexdigest())

sha1 = hashlib.sha1()
sha1.update("加密le".encode("gbk"))
print(sha1.hexdigest())

(4)文件的一致性校验

​ 如何验证我们下载的资源是否有病毒呢?这就需要文件的一致性校验了。在我们下载一个软件时,往往都带有一个MD5或者shax值,当我们下载完成这个应用程序时你要是对比大小根本看不出什么问题,你应该对比他们的md5值,如果两个md5值相同,就证明这个应用程序是安全的,如果你下载的这个文件的MD5值与服务端给你提供的不同,那么就证明你这个应用程序肯定是植入病毒了(文件损坏的几率很低)

例如: 校验Pyhton解释器的Md5值是否相同
import hashlib

def file_check(file_path):
    with open(file_path,mode='rb') as f1:
        md5= hashlib.md5()
        while True:
            content = f1.read(1024)       # 2049 1025 1
            if content:
                md5.update(content)
            else:
                return md5.hexdigest()
print(file_check('python-3.6.6-amd64.exe'))
posted @ 2019-09-16 21:23  永亮  阅读(552)  评论(0编辑  收藏  举报