|
|
|
@ -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))
|