我 有 一 个 设置 任务 来 根据 . NET 身份 数据 库 验证 Django 应用 程序 用户 。 我 找到 了 许多 相关 的 主题 , 但 它们 要么 太 旧 , 要么 没有 解决 我 所 需要 的 - 密码 有 Django 的 等价 物 。
5q4ezhmt1#
所以我最终学习了这个源代码https://github.com/aspnet/AspNetIdentity/blob/master/src/Microsoft.AspNet.Identity.Core/Crypto.cs,并且写了我的django版本。代码对我来说适用于django 2. 1. 1和.NET 4. 5
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")
oxcyiej72#
身份v3版本:
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条答案
按热度按时间5q4ezhmt1#
所以我最终学习了这个源代码https://github.com/aspnet/AspNetIdentity/blob/master/src/Microsoft.AspNet.Identity.Core/Crypto.cs,并且写了我的django版本。代码对我来说适用于django 2. 1. 1和.NET 4. 5
oxcyiej72#
身份v3版本: