"""
Author: tanglei
DateTime:2024-11-18 完成
微信:ciss_cedar
欢迎一起学习
"""
from enum import Enum
from cryptography.hazmat.primitives import hmac
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 Hmac:
def __init__(self, hash_name,key):
self.hash_name = hash_name
self.key=key
def hmac(self,plaintext:str):
algorithm=getattr(hmac.hashes, self.hash_name)
plaintext=plaintext.encode()
key=bytes.fromhex(self.key)
if self.hash_name=='BLAKE2b' :
h_digest = hmac.HMAC(key,algorithm(64))
elif self.hash_name=='BLAKE2s':
h_digest = hmac.HMAC(key,algorithm(32))
elif self.hash_name == 'SHAKE128':
h_digest = hmac.HMAC(key,algorithm(16))
elif self.hash_name == 'SHAKE256':
h_digest = hmac.HMAC(key,algorithm(32))
else:
h_digest = hmac.HMAC(key,algorithm())
h_digest.update(plaintext)
hmac_bytes=h_digest.finalize()
return hmac_bytes.hex().upper()
def hmac_bytes(self, plaintext: bytes):
if self.hash_name in ('SHAKE128','SHAKE256'):
hmac_bytes=b'SHAKE128/SHAKE256 Not Support HMAC'
return hmac_bytes
algorithm = getattr(hmac.hashes, self.hash_name)
if self.hash_name=='BLAKE2b' :
h_digest = hmac.HMAC(self.key,algorithm(64))
elif self.hash_name=='BLAKE2s':
h_digest = hmac.HMAC(self.key,algorithm(32))
elif self.hash_name == 'SHAKE128':
h_digest = hmac.HMAC(self.key,algorithm(16))
elif self.hash_name == 'SHAKE256':
h_digest = hmac.HMAC(self.key,algorithm(32))
else:
h_digest = hmac.HMAC(self.key,algorithm())
h_digest.update(plaintext)
hmac_bytes = h_digest.finalize()
return hmac_bytes
def main():
# 传入str
key='2934412A66B7A186DC35DC40E926F9EE'
plaintext = '1'
Hash_Select = HashName.blake2b.value
myHmac=Hmac(Hash_Select,key)
hmac_value=myHmac.hmac(plaintext)
method = 'hmac'
print(f'{Hash_Select}.{method}={hmac_value}')
# 传入bytes
key='2934412A66B7A186DC35DC40E926F9EE'
key=bytes.fromhex(key)
plaintext = '1'
plaintext=plaintext.encode()
myHmac=Hmac(HashName.blake2b.value,key)
hmac_bytes_value=myHmac.hmac_bytes(plaintext)
method = 'hmac_bytes'
print(f'{Hash_Select}.{method}={hmac_bytes_value}')
hmac_value=hmac_bytes_value.hex().upper()
method = 'hmac_bytes.hex'
print(f'{Hash_Select}.{method}={hmac_value}')
if __name__ == '__main__':
main()
01-28
3万+
3万+
09-06
3752
3752

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



