常用HASH算法,md5,sha,sm3系列等

"""
Author: tanglei
DateTime:2024-11-18 完成
微信:ciss_cedar
欢迎一起学习
"""
from enum import Enum
from cryptography.hazmat.primitives import hashes


class HashName(Enum):
    (MD5, sha1, sha224, SHA256, sha384, sha512, blake2b, blake2s,
     shake128,shake256,
     sha3_224, sha3_256, sha3_384, sha3_512, sm3)=(
        'MD5', 'SHA1', 'SHA224', 'SHA256', 'SHA384', 'SHA512', 'BLAKE2s','BLAKE2b',
        'SHAKE128','SHAKE256',
        'SHA3_224', 'SHA3_256', 'SHA3_384', 'SHA3_512', 'SM3')

class Hash:
    def __init__(self, hash_name):
        self.hash_name = hash_name

    def hash(self, plaintext:str):
        algorithm=getattr(hashes, self.hash_name)
        plaintext=plaintext.encode()

        if self.hash_name=='BLAKE2b' :
            h_digest = hashes.Hash(algorithm(64))
        elif self.hash_name=='BLAKE2s':
            h_digest = hashes.Hash(algorithm(32))
        elif self.hash_name == 'SHAKE128':
            h_digest = hashes.Hash(algorithm(16))
        elif self.hash_name == 'SHAKE256':
            h_digest = hashes.Hash(algorithm(32))
        else:
            h_digest = hashes.Hash(algorithm())


        h_digest.update(plaintext)
        hash_bytes=h_digest.finalize()

        return hash_bytes.hex().upper()

    def hash_bytes(self, plaintext:bytes):
        algorithm=getattr(hashes, self.hash_name)

        if self.hash_name=='BLAKE2b' :
            h_digest = hashes.Hash(algorithm(64))
        elif self.hash_name=='BLAKE2s':
            h_digest = hashes.Hash(algorithm(32))

        elif self.hash_name == 'SHAKE128':
            h_digest = hashes.Hash(algorithm(16))
        elif self.hash_name == 'SHAKE256':
            h_digest = hashes.Hash(algorithm(32))

        else:
            h_digest = hashes.Hash(algorithm())
        h_digest.update(plaintext)
        hash_bytes=h_digest.finalize()

        return hash_bytes

    def hash_file(self,filename):
        # file_name='resource/python-3.12.6-amd64.exe'
        read_num = 4096
        algorithm=getattr(hashes,self.hash_name)

        if self.hash_name=='BLAKE2b' :
            h_digest = hashes.Hash(algorithm(64))
        elif self.hash_name=='BLAKE2s':
            h_digest = hashes.Hash(algorithm(32))

        elif self.hash_name == 'SHAKE128':
            h_digest = hashes.Hash(algorithm(16))
        elif self.hash_name == 'SHAKE256':
            h_digest = hashes.Hash(algorithm(32))

        else:
            h_digest = hashes.Hash(algorithm())

        with open(filename, mode='rb') as file:
            data = file.read(read_num)
            while data:
                h_digest.update(data)
                data = file.read(read_num)
        hash_bytes = h_digest.finalize()
        return hash_bytes.hex().upper()

def main():
    #str
    Hash_Select=HashName.blake2b.value
    myHash=Hash(Hash_Select)
    plaintext='1'
    hash_value=myHash.hash(plaintext)
    method='hash'
    print(f'{Hash_Select}.{method}={hash_value}')

    Hash_Select = HashName.blake2b.value
    myHash = Hash(Hash_Select)
    plaintext=b'1'
    hash_bytes_value=myHash.hash_bytes(plaintext)

    method = 'hash_bytes'
    print(f'{Hash_Select}.{method}={hash_bytes_value}')
    hash_value=hash_bytes_value.hex().upper()
    method = 'hash_bytes.hex'
    print(f'{Hash_Select}.{method}={hash_value}')


    file_name= r'D:/Python/TestTeam/resource/python-3.12.6-amd64.exe'
    Hash_Select = HashName.sm3.value
    myHash=Hash(Hash_Select)
    hash_value=myHash.hash_file(file_name)
    method='hash_file'
    print(f'{Hash_Select}.{method}={hash_value}')
    #84E2F76209CDAADFB1F42BC3549CF6409891383E113EABAC89E3B00DEF12A27E
    #md5 = d8548aa7609a762ba66f62eeb2ca862d
    #sha256 = 5914748e6580e70bedeb7c537a0832b3071de9e09a2e4e7e3d28060616045e0a
if __name__ == '__main__':
    main()
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值