"""
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()
常用HASH算法,md5,sha,sm3系列等
最新推荐文章于 2026-01-04 21:21:17 发布
8432

被折叠的 条评论
为什么被折叠?



