From a95f15efb3b0ad81b083f487794019e0d9cf43f9 Mon Sep 17 00:00:00 2001 From: prmzba57e <1641050300@qq.com> Date: Wed, 13 Dec 2023 09:38:21 +0800 Subject: [PATCH] ADD file via upload --- hash_algorithm.py | 79 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 hash_algorithm.py diff --git a/hash_algorithm.py b/hash_algorithm.py new file mode 100644 index 0000000..1dd70cb --- /dev/null +++ b/hash_algorithm.py @@ -0,0 +1,79 @@ +import binascii +import hashlib +from pyDes import * +from passlib.hash import lmhash +from Crypto.Hash import MD4 + + + +# def DesEncrypt(str, Des_Key): +# k = des(Des_Key, ECB, pad=None) +# EncryptStr = k.encrypt(str) +# return binascii.b2a_hex(EncryptStr) + +# def Zero_padding(str): +# b = [] +# l = len(str) +# num = 0 +# for n in range(l): +# if (num < 8) and n % 7 == 0: +# b.append(str[n:n + 7] + '0') +# num = num + 1 +# return ''.join(b) p + +def LM_Hash(plaintext): + """ + 注释部分为轮子代码实现,但是调用库执行效率高点,就不用了 + """ + # test_str = plaintext + # # 用户的密码转换为大写,并转换为16进制字符串 + # test_str = test_str.upper().encode('utf-8').hex() + # str_len = len(test_str) + # # print("str_len = ",str_len) + # # 密码不足14字节将会用0来补全 + # if str_len < 28: test_str = test_str.ljust(28, '0') + # # 固定长度的密码被分成两个7byte部分 + # t_1 = test_str[0:len(test_str) // 2] + # t_2 = test_str[len(test_str) // 2:] + # # 每部分转换成比特流,并且长度位56bit,长度不足使用0在左边补齐长度 + # t_1 = bin(int(t_1, 16)).lstrip('0b').rjust(56, '0') + # t_2 = bin(int(t_2, 16)).lstrip('0b').rjust(56, '0') + # # 再分7bit为一组末尾加0,组成新的编码 + # t_1 = Zero_padding(t_1) + # t_2 = Zero_padding(t_2) + # # print (t_1,t_2) + # t_1 = hex(int(t_1, 2)) + # t_2 = hex(int(t_2, 2)) + # t_1 = t_1[2:] + # t_2 = t_2[2:] + # if '0' == t_2: + # t_2 = "0000000000000000" + # t_1 = binascii.a2b_hex(t_1) + # t_2 = binascii.a2b_hex(t_2) + # # 上步骤得到的8byte二组,分别作为DES key为"KGS!@#$%"进行加密。 + # LM_1 = DesEncrypt("KGS!@#$%", t_1) + # LM_2 = DesEncrypt("KGS!@#$%", t_2) + # # 将二组DES加密后的编码拼接,得到最终LM HASH值。 + # LM = LM_1 + LM_2 + LM2 = lmhash.hash(plaintext) + # return LM + return LM2.encode('utf-8') + # print(LM) + +def NTLM_Hash(plaintext): + #,nthash.hash(plaintext).encode('utf-8') + return binascii.hexlify(MD4.new(plaintext.encode("utf-16le")).digest()) + +def MD5_Hash(plaintext): + return binascii.hexlify(hashlib.md5(plaintext.encode('utf-8')).digest()) + +def SHA1_Hash(plaintext): + return binascii.hexlify(hashlib.sha1(plaintext.encode('utf-8')).digest()) + +def SHA256_Hash(plaintext): + return binascii.hexlify(hashlib.sha256(plaintext.encode('utf-8')).digest()) + +# b = '123456' +# a = NTLM_Hash(b) +# c = LM_Hash(b) +# print(a,c,type(a),type(c)) \ No newline at end of file