欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2023-01-30 11:43:05
Python 入门之 内置模块 -- hashlib模块 摘要算法,加密算法 文件的一致性校验 hashlib的特征以及使用要点 ......

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

1、hashlib

摘要算法,加密算法

(1)主要用途:

<1> 加密 : md5 sha1 sha256 sha512

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

<2> 校验 : md5 sha1 sha256 sha512值

import hashlib

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

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

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

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

<4> 转化过程不可逆

(3)md5加密:

<1> 普通加密:

import hashlib
md5 = hashlib.md5()   # 初始化
md5.update("alex".encode("utf-8"))   # 将明文转换成字节添加到新初始化的md5中
print(md5.hexdigest())   # 进行加密
        #现在可以进行简单的破解  -- 撞库

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

加固定盐
import hashlib
md5 = hashlib.md5("rimo_dsb".encode("utf-8"))   # 初始化
md5.update("alex".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("日魔就是一个大sb".encode("utf-8"))
print(sha1.hexdigest())

sha1 = hashlib.sha1()
sha1.update("日魔就是一个大sb".encode("gbk"))
print(sha1.hexdigest())

(3)文件的一致性校验:

​ 如何验证我们下载的资源是否有病毒呢?这就需要文件的一致性校验了。在我们下载一个软件时,往往都带有一个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'))