例子当然要简洁,废话当然要少说,这块主要以 sha256 为例来进行说明,当然你可以选择 sha512 、md5 等其他算法!

文件的 sha256

这里唯一要注意的一点:文件一定要以二进制的形式打开读取!

import hashlibpath = 'setup.py'
algorithm = hashlib.sha256()  # hashlib.sha512()  or hashlib.md5()
with open(path, 'rb') as f:algorithm.update(f.read())
print(algorithm.hexdigest(), path)

如果读取的文件比较大的话,可以尝试分片读取:

import hashlib
import ospath = 'setup.py'
algorithm = hashlib.sha256()
size = os.path.getsize(path)
with open(path, 'rb') as f:while size >= 1024 * 1024:algorithm.update(f.read(1024 * 1024))size -= 1024 * 1024algorithm.update(f.read())
print(algorithm.hexdigest(), path)
74765dc4880fe7759c0206e2bcfe30c8d3e8e305526434b4c62d6c6ed2141c12 setup.py

可以看到,结果和直接在 Linux 上使用 sha256sum命令(如果使用 sha512 或 md5 算法,在 Linux 请用 sha512sum 或 md5sum 生成哈希码)得到的结果一致:

[root@master test]# sha256sum setup.py 
74765dc4880fe7759c0206e2bcfe30c8d3e8e305526434b4c62d6c6ed2141c12  setup.py

字符串的 sha256

这里唯一要注意的一点:字符串一定要先编码,即使是空字符串也不例外(和文件要以二进制形式读取的原因类似)!

import hashlib
text = 'hello world'
algorithm = hashlib.sha256()
algorithm.update(text.encode(encoding='UTF-8'))
print(algorithm.hexdigest(), text)
b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9 hello world

不然的话会报错:

Traceback (most recent call last):File "D:/Projects/insight-tools-rest/test.py", line 4, in <module>algorithm.update(text)
TypeError: Unicode-objects must be encoded before hashing

校验的话就是多了一层比较哈希字符串的逻辑,这个我就不多啰嗦了!

Python 生成文件或字符串的 sha256相关推荐

  1. Python计算文件或字符串的MD5/SHA

    本文章讲如何通过Python实现计算文件或字符串的MD5, SHA1, SHA224, SHA256, SHA384, SHA512值. 原文:https://blog.zeruns.tech/arc ...

  2. 使用 Python 生成文件夹目录结构

    新建一个 python 文件,复制以下代码,运行时指定一下 ignore_list 和 direction_path 即可快速生成文件夹目录结构图. import re from pathlib im ...

  3. python生成文件夹以及压缩文件夹

    ''' @Description 生成文件夹 @params (path) 文件夹路径 @params (title) 文件名称 @params (content) html 文件代码 @params ...

  4. python生成文件夹和删除文件夹

    import os import shutil 生成文件夹 def tp(tp=None): os.makedirs(""+tp) # 生成文件夹位置的路径 删除文件夹 os.re ...

  5. python生成文件夹并向文件夹写文件_python - 文件练习生成100个MAC地址写入文件

    需求: 生成100个MAC地址并写入文件中,MAC地址前6位(16进制)为01-AF-3B 解题思路: 要求生成这样格式的mac地址:01-AF-3B-xx-xx-xx 首先生成-xx格式,16进制组 ...

  6. python 查找文件内容字符串位置_python 查找目录下 文件名中含有某字符串的文件...

    有坑的地方: 若是代码写成这样: [( os.path.abspath(x)) for x in os.listdir(startPath) ] 此代码只能用于当前目录下,listdir列出的都只是文 ...

  7. python打印文件到字符串_请问Python打印字符串到文本文件

    慕哥6287543 如果您正在使用Python 3.然后你可以用打印功能 :your_data = {"Purchase Amount": 'TotalAmount'} print ...

  8. python生成文件怎么在文件名后面加1而不是覆盖_python脚本——将同一个文件夹下的相同文件名的不同文件分开...

    需求:一个文件夹下有相同文件名的两种格式的文件,且数量相等,我的两种文件格式是:jpg和tif.rbox.txt,想要把这两种文件分别放到两个文件夹里面 例如:将789文件夹下的两种文件分别放到456 ...

  9. python生成回文字符串_回文字符串最长回文子串和子序列 - Python

    Palindrome 回文字符串就是指从前往后和从后往前读,都是一样的,比如"aabcbaa". 注意区分子串和子序列,子串是连续的,子序列可以不连续 题型1:判断字符串是否为回文 ...

最新文章

  1. HTTP长连接服务器端推技术
  2. Kmeans++、Mini-Batch Kmeans、Bisecting Kmeans、K中心点(K-Medoids)算法、K众数聚类、核K均值聚类
  3. 改动Androidproject的名称(非Eclipse重命名)
  4. 金融风控实战——信贷评分卡
  5. [NOIP1999] 普及组
  6. Java黑皮书课后题第3章:*3.34(几何:线段上的点)编程练习题3.32显示了如何测试一个点是否在一个无限长的直线上。修改3.32测试一个点是否在一个线段上。编写程序,输入三个点坐标,显示在否线段
  7. hoj 13788 Dwarves
  8. 如何快速在Github找到你想要的东西
  9. 大数据每周分享第 008 期
  10. python调用bat_python windows 远程执行bat
  11. tornado web高级开发项目
  12. 探究Lucene计算权重的过程
  13. JSP(九大内置对象)
  14. caffe自带可运行的两个例子:mnist和cifar10
  15. 【Web前端】笔试题含解析
  16. 解除计算机屏保密码设置密码,Win10锁屏密码怎么取消掉?Win10系统取消锁屏密码的两种方法...
  17. Anbox 容器管理服务
  18. 被孙杨遮挡LOGO的安踏,到底做错了什么?
  19. 张一鸣的“成事哲学”:取势、明道、优术、践行、合众
  20. 零基础 Python学习

热门文章

  1. JS 观察者模式实现简单EventBus
  2. WaitForSingleObject SetEvent
  3. 《芯片技术10讲》笔记01
  4. 实现编号自动增加00001
  5. 推测式提问,先“复述你对别人的话语理解”
  6. 使用IconWorkshop制作带alpha通道的位图
  7. python从含有汉字和数字的字符串中提取数字部分
  8. 【database】数据库schema概念解读
  9. 微软正在关闭Windows Live Messenger:这对您意味着什么
  10. 携程网案例中的图片颜色渐变