我已经设置任务,可以针对.NET Identity Database身份验证Django应用程序用户。我发现了许多相关的主题,但是它们要么太老了,要么不解决我所需要的东西 - django的密码hasher。

问题描述 投票:0回答:2
一起使用。

from django.contrib.auth.hashers import pbkdf2 import hashlib from base64 import b64decode identity_PasswordHash = "AOOVvPns8Nov6CsJDTAWz+QDOEO2csh60m5aYyX2Vn7LsNDhiiZ5UaSDWr5izwWeHA==" pwd_plain = 'Hellow123'; def dotnet_identity_check_password(password, hash): binsalt = b64decode(hash)[1:17] binpwd = b64decode(hash)[17:] genpwd = pbkdf2(password, binsalt, 1000, digest=hashlib.sha1, dklen=32) if genpwd == binpwd: return True return False if dotnet_identity_check_password(pwd_plain,identity_PasswordHash): print("OK") else: print("Fail")

python asp.net django authentication asp.net-identity
2个回答
2
投票

IDENTITYV3 VERSON: import hashlib from base64 import b64decode def dotnet_identity_v3_check_password(password:str, hash:str)-> bool: bhash = b64decode(hash) iterCount = readNetworkByteOrder(bhash,5) saltSize = readNetworkByteOrder(bhash,9) if (saltSize < 128 / 8): return False salt = bhash[13:13+saltSize] subkeySize = len(bhash) - 13 - saltSize if (subkeySize < 128 / 8): return False expectedSubkey = bhash[13+saltSize:] actualSubkey = hashlib.pbkdf2_hmac('sha256', password.encode('utf-8'), salt, iterCount, subkeySize) if expectedSubkey == actualSubkey: return True return False def readNetworkByteOrder( buffer: bytes, offset:int)->int: return ((buffer[offset]) << 24) | ((buffer[offset + 1]) << 16) | ((buffer[offset + 2]) << 8) | ((buffer[offset + 3]))



2
投票
import hashlib import base64 from django.contrib.auth.hashers import BasePasswordHasher class ASPNetPasswordHasher(BasePasswordHasher): """ Password hasher that can verify ASP.NET hashes using PBKDF2 with HMAC-SHA1, HMAC-SHA256, or HMAC-SHA512. """ algorithm = "aspnet_pbkdf2" def verify(self, password, encoded): hashed_password = encoded.split('$')[1] bhash = base64.b64decode(hashed_password) prf = self.readNetworkByteOrder(bhash, 1) iterations = self.readNetworkByteOrder(bhash, 5) saltSize = self.readNetworkByteOrder(bhash, 9) if prf == 0: algorithm = 'sha1' elif prf == 1: algorithm = 'sha256' elif prf == 2: algorithm = 'sha512' else: return False if (saltSize < 128 / 8): return False salt = bhash[13:13 + saltSize] subkeySize = len(bhash) - 13 - saltSize if (subkeySize < 128 / 8): return False expectedSubkey = bhash[13 + saltSize:] actualSubkey = hashlib.pbkdf2_hmac(algorithm, password.encode('utf-8'), salt, iterations, subkeySize) if expectedSubkey == actualSubkey: return True return False def readNetworkByteOrder(self, buffer: bytes, offset:int)->int: return ((buffer[offset]) << 24) | ((buffer[offset + 1]) << 16) | ((buffer[offset + 2]) << 8) | ((buffer[offset + 3]))


最新问题
© www.soinside.com 2019 - 2025. All rights reserved.