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

生成、查看文件的MD5、SHA1、SHA2、SHA3值

程序员文章站 2024-03-16 13:38:04
...

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、SHA1、SHA2、SHA3值
测试时应该关掉再重新开,不然可能会利用之前的计算信息,导致后面计算速度非常快从而造成结果不准确。

<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