生成、查看文件的MD5、SHA1、SHA2、SHA3值
文章目录
1. 按
操作系统自带的一般都有相关的命令,在Linux系统下可以使用bash,Windows下用CMD均可以轻松地生成文件的MD5、SHA、SHA256值,另外Windows下还可以直接查看。
此外我们还可以使用Python进行编写相关的程序,Windows目前支持到了SHA2,不过可以编写程序实现支持SHA3。
2. 介绍
2.1. MD5
MD5信息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value)
2.2. SHA-1
SHA-1(英语:Secure Hash Algorithm 1,中文名:安全散列算法1)是一种密码散列函数,美国国家安全局设计,并由美国国家标准技术研究所(NIST)发布为联邦数据处理标准(FIPS)。SHA-1可以生成一个被称为消息摘要的160位(20字节)散列值,散列值通常的呈现形式为40个十六进制数。
2.3. SHA-2
SHA256算法使用的哈希值长度是256位。
成员名称 | 为避免混淆使用的非正式名称 |
---|---|
SHA | SHA-0 |
SHA-1 | SHA-1 |
SHA-224 | SHA-2 |
SHA-256 | SHA-2 |
SHA-384 | SHA-2 |
SHA-512 | SHA-2 |
2.4. SHA-3
- SHA-3第三代安全散列算法(Secure Hash Algorithm 3),之前名为Keccak(念作/ˈkɛtʃæk/或/kɛtʃɑːk/))算法,设计者宣称在 Intel Core 2 的CPU上面,此算法的性能是12.5cpb(每字节周期数,cycles per byte)。不过,在硬件实做上面,这个算法比起其他算法明显的快上很多。
- 2012年10月2日,Keccak 被选为NIST散列函数竞赛的胜利者。SHA-3并不是要取代SHA-2,因为SHA-2并没有出现明显的弱点。由于对MD5、SHA-0和SHA-1出现成功的**,NIST感觉需要一个与之前算法不同的,可替换的加密散列算法,也就是SHA-3。
- sha3 官网 FIPS 202 - SHA-3 Standard(现行标准)
3. Linux
md5sum file1.zip >> MD5.txt
sha1sum file1.zip >> SHA1.txt
sha256sum file1.zip >> SHA256.txt
4. Windows
C:\Users\Coco>certutil -hashfile /?
用法:
CertUtil [选项] -hashfile InFile [HashAlgorithm]
通过文件生成并显示加密哈希
选项:
-Unicode -- 以 Unicode 编写重定向输出
-gmt -- 将时间显示为 GMT
-seconds -- 用秒和毫秒显示时间
-v -- 详细操作
-privatekey -- 显示密码和私钥数据
-pin PIN -- 智能卡 PIN
-sid WELL_KNOWN_SID_TYPE -- 数字 SID
22 -- 本地系统
23 -- 本地服务
24 -- 网络服务
哈希算法: MD2 MD4 MD5 SHA1 SHA256 SHA384 SHA512
4.1. 生成
certutil -hashfile file1.zip MD5 >> MD5.txt
certutil -hashfile file1.zip SHA1 >>SHA1.txt
certutil -hashfile file1.zip SHA256 >> SHA256.txt
4.2. 查看
certutil -hashfile yourfilename.ext MD5
certutil -hashfile yourfilename.ext SHA1
certutil -hashfile yourfilename.ext SHA256
5. Python
主要用到了hashlib
Named constructor functions are also available, these are faster than using new(name):
md5(), sha1(), sha224(), sha256(), sha384(), sha512(), blake2b(), blake2s(),
sha3_224, sha3_256, sha3_384, sha3_512, shake_128, and shake_256.
5.1. 代码
import hashlib
import os
from datetime import datetime
def getHash(filePath, hashRule):
if not os.path.isfile(filePath):
return
print(hashRule)
starttime = datetime.now()
f = open(filePath,'rb')
while True:
b = f.read(1024*1024*8)
if not b :
break
hashRule.update(b)
f.close()
# 输出文件的md5值以及记录运行时间
print(hashRule.hexdigest())
print(datetime.now()-starttime)
print()
filePath = 'cn_windows_10_business_editions_version_2004_x64_dvd_c59a4f91.iso'
getHash(filePath, hashlib.md5())
# getHash(filePath, hashlib.sha1())
# getHash(filePath, hashlib.sha224())
# getHash(filePath, hashlib.sha256())
# getHash(filePath, hashlib.sha512())
# getHash(filePath, hashlib.new('sha3_224'))
# getHash(filePath, hashlib.new('sha3_256'))
# getHash(filePath, hashlib.new('sha3_512'))
5.2. 结果
均是对如下的一个Win10的镜像文件做的信息摘要。
测试时应该关掉再重新开,不然可能会利用之前的计算信息,导致后面计算速度非常快从而造成结果不准确。
<md5 HASH object @ 0x00000280C4800A30>
3c4da086657215c8d2729259db7ef7bd
0:00:19.120629
<sha1 HASH object @ 0x000002B4179E0A30>
ed65cc6f3b4f90fdbdab949ba6286708e8dcf0f1
0:00:22.649357
<sha224 HASH object @ 0x000002977E740A30>
bef2ba008c194e140b0a005e16ca6ba40eee48b2bc82f7c7d332aa32
0:00:22.830891
<sha256 HASH object @ 0x0000021DDB6B0A30>
7d1644a5bc130d0e819791a6f950113e1e03948df2376589cd0db203a6f3a07b
0:00:25.096450
<sha512 HASH object @ 0x000002485C9B0A30>
b14aec8892da125c12a9cce556642ac9c270d4d2bf29d13348bd12499b5d97b7b6471b88222d8bfc4bf423a4cd04d874a797a931a7225a363be401f627236129
0:00:35.661646
<_sha3.sha3_224 object at 0x000001D09E601D30>
6e2566102000d2545415640b4a6e26c7fbb2285d9d69e9522a2b784f
0:00:25.355275
<_sha3.sha3_256 object at 0x0000014C3F871D30>
2ecd117f7bc90775f30ace54396d4fce6244426d188781cf0eeaf62ee7571e00
0:00:26.699698
<_sha3.sha3_512 object at 0x0000018FE64F1D30>
e6841e3e247727e3bf67e0cfbf8aa85a38669de0164963f0e56d776af17cb9eee090bbd3e947a3dccdffe3a6730ebe3ff6951d043a51549d2b07318792685d12
0:00:39.906140
推荐阅读