python-- hashlib 模块

简介: python-- hashlib 模块

前戏


hashlib摘要算法的模块能够把一个字符串数据类型的变量,转换成一个定长的、密文的字符串,字符串里的每一个字符都是一个十六进制数字

对于同一个字符串,不管这个字符串有多长,只要是相同的,无论在任何环境下,多少次执行,在任何语言中,使用相同的算法、相同的手段得到的结果永远是相同的,只要不是相同的字符串,得到的结果一定不同

md5是一个算法,32位的字符串,每个字符都是一个十六进制

sha1也是一个算法,40位的字符串,每个字符都是一个十六进制


hashlib


import hashlib
m = hashlib.md5()
m.update('hello卧槽'.encode(encoding=('utf-8')))
print(m.hexdigest())
m.update(b'kitty')
print(m.hexdigest())  # =m.update(b'hello卧槽kitty')

结果:

37a7e55322e9c07f55b4a5f2d1cb4e37
4c2af0766bfd01846e7bb41d778202cb

import hashlib
s = 'zouzou123'
md5_obj = hashlib.md5()  # 实例化一个md5对象
md5_obj.update(s.encode('utf-8'))
res = md5_obj.hexdigest()  # 加密后的结果
print(res, type(res), len(res))

结果:

c018ac898b8c0cb16c623b0d1767d374 <class 'str'> 32


加盐


import hashlib
s = 'zouzou123'
md5_obj = hashlib.md5('任意的字符串作为盐'.encode('utf-8'))
md5_obj.update(s.encode('utf-8'))
res = md5_obj.hexdigest()
print(res, len(res), type(res))

结果:

c5b76512a84656fcae4fe2b8c86dace8 32 <class 'str'>
动态加盐
import hashlib
username = input('username : ')
passwd = input('password : ')
md5obj = hashlib.md5(username.encode('utf-8'))
md5obj.update(passwd.encode('utf-8'))
print(md5obj.hexdigest())


sha1 加密


sha1或者shaxx的加盐和不加盐的用法和md5的一样,只需要在实例化的时候把md5换成sha1或者shaxx

import hashlib
s = 'zouzou123'
md5_obj = hashlib.sha1()
md5_obj.update(s.encode('utf-8'))
res = md5_obj.hexdigest()
print(res, type(res), len(res))

结果:

b4b4aeb89675cd505bbbc36288e9019f2a047341 <class 'str'> 40

文件的一致性校验

import hashlib
md5_obj = hashlib.md5()
with open('test', 'rb') as f:
    md5_obj.update(f.read())
    ret1 = md5_obj.hexdigest()
md5_obj = hashlib.md5()
with open('demo', 'rb') as f:
    md5_obj.update(f.read())
    ret2 = md5_obj.hexdigest()
print(ret1, ret2)  # 看两个文件md5后的值是不是一样

md5字符串的拼接

import hashlib
md5_obj = hashlib.md5()
md5_obj.update('zouzou,abc,def'.encode('utf-8'))
print(md5_obj.hexdigest())
md5_obj = hashlib.md5()
md5_obj.update('zouzou,'.encode('utf-8'))
md5_obj.update('abc,'.encode('utf-8'))
md5_obj.update('def'.encode('utf-8'))
print(md5_obj.hexdigest())

结果:

58f4cfbd8cd4b57f25a56cea403de1bb
58f4cfbd8cd4b57f25a56cea403de1bb

实例化了两次,如果第二次没实例化,则会把上面的字符串+到前面在进行md5


相关文章
|
4天前
|
JSON JavaScript 数据格式
|
4天前
|
监控 Python
paramiko 模块 ---Python脚本监控当前系统的CPU、内存、根目录、IP地址等信息
paramiko 模块 ---Python脚本监控当前系统的CPU、内存、根目录、IP地址等信息
|
14天前
|
XML 数据格式 Python
Python的`import`用于加载模块,基础形式是`import module`,全量导入
【6月更文挑战第23天】Python的`import`用于加载模块,基础形式是`import module`,全量导入;`from module import name`选择性导入部分,减少命名空间污染;`from module import *`导入所有(不推荐),易引发冲突。别名导入如`from math import sqrt as square_root`可避免冲突。包导入用`.`,如`import xml.etree.ElementTree as ET`。
36 8
|
14天前
|
XML 数据格式 Python
在Python中,导入其他模块是通过使用import语句完成的
在Python中导入模块涉及`import`语句的不同用法:1) `import math`导入整个标准库;2) `from math import sqrt`导入单个函数;3) `import numpy as np`使用别名;4) `from random import *`导入所有(不推荐);5) `import xml.etree.ElementTree as ET`导入子模块;6) 使用`importlib.import_module()`延迟导入;7) `from .module import func`导入相对路径模块,需管理`sys.path`。
32 6
|
11天前
|
Python
python--os模块
python--os模块
13 2
|
11天前
|
Python
python-time模块
python-time模块
9 1
|
13天前
|
算法 数据安全/隐私保护 开发者
Python logger模块详细讲解
Python logger模块详细讲解
17 3
|
14天前
|
Python
Python的`os`模块核心功能概述:通过`os.getcwd()`获取
【6月更文挑战第23天】Python的`os`模块核心功能概述:通过`os.getcwd()`获取、`os.chdir()`改变工作目录;使用`os.mkdir()`, `os.makedirs()`创建目录,`os.rmdir()`, `os.removedirs()`删除;`os.rename()`, `os.renames()`重命名文件或目录;`os.remove()`删除文件;`os.listdir()`列出目录内容;`os.path.exists()`, `os.path.isfile()`, `os.path.isdir()`检查路径;`os.stat()`获取文件属性。
22 4
|
14天前
|
XML 数据格式 Python
Python模块导入包括:`import math`导入标准库
【6月更文挑战第23天】Python模块导入包括:`import math`导入标准库,`from math import sqrt`导入单个函数,`import numpy as np`给模块取别名,`from random import *`导入所有(不推荐),`import xml.etree.ElementTree as ET`导入子模块,`import_module(&#39;pandas&#39;)`按需导入,和使用相对路径如`from .module import func`处理项目结构。记得调整`sys.path`以包含自定义模块路径。
23 4
|
13天前
|
Linux Python
Python- jinja2模块详解
Python- jinja2模块详解
12 1