生成、查看文件的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. 生成

4.2. 单个文件

certutil -hashfile file1.zip MD5 >> MD5.txt
certutil -hashfile file1.zip SHA1 >>SHA1.txt
certutil -hashfile file1.zip SHA256 >> SHA256.txt

4.3. 当前目录下的所有文件

title md5批量生成脚本
setlocal enabledelayedexpansion
%~d0
cd %~dp0
if exist md5.txt del md5.txt
for /R %%s in (*) do (
certutil -hashfile "%%s" MD5
)>>md5.txt

4.4. 查看

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
展开阅读全文
©️2020 CSDN 皮肤主题: 编程工作室 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值