亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

pbkdf2_sha256加密

pbkdf2_sha256加密

RISEBY 2023-09-12 18:20:34
大家好,我正在弄清楚 Pbkdf2_sha256 是如何工作的。這是我目前正在研究的一些破解哈希值PBKDF2 pbkdf2_sha256$10000$005OtPxTXhPq$K/2GplWPJsBVj+qbgdKW8YEteQyUkIiquT5MaOhPo4Y=:harryPBKDF2 pbkdf2_sha256$10000$00Qhibr5Mbeg$l9grYueDrl3qN3NA7e9j5PodgV1XkGTz0Z6ajhF99AY=:radioPBKDF2 pbkdf2_sha256$10000$00h7h0g1ZKE1$YEobSm/y+cFg/VXhU4gGYJ6eOkZ68jhJ5axDu68Dack=:momoPBKDF2 pbkdf2_sha256$10000$01JMkfGk1RXh$vD+GGZshw5kExtZOpl5+Lht3xECULdbNVOesoTicxto=:fredPBKDF2 pbkdf2_sha256$10000$01vkw1viCg4J$2hjlbq10Jh/Su3yqjKfYCnCSt1WlKcKJtsqDET618M0=:getPBKDF2 pbkdf2_sha256$10000$01wayF5JLVSZ$2/9COWqb6SZG/raqabtU8fNBzkrt2puN7SaKw0U7jBs=:987456321這是我用于計算哈希值的代碼和輸出>>> from passlib.hash import pbkdf2_sha256>>> from passlib.utils.binary import ab64_decode>>> print(pbkdf2_sha256.hash("harry", rounds=10000, salt=ab64_decode(b'005OtPxTXhPq')))$pbkdf2-sha256$10000$005OtPxTXhPq$l9LhRMPBW.EEdlBE9b.P0Z70Kxidl9EJhfGK7FiLUHA比較這兩者,您可以看到差異。$pbkdf2_sha256$10000$005OtPxTXhPq$K/2GplWPJsBVj+qbgdKW8YEteQyUkIiquT5MaOhPo4Y=$pbkdf2-sha256$10000$005OtPxTXhPq$l9LhRMPBW.EEdlBE9b.P0Z70Kxidl9EJhfGK7FiLUHA有人可以解釋一下造成這種情況的原因以及如何計算正確的哈希值嗎?
查看完整描述

2 回答

?
繁星coding

TA貢獻1797條經驗 獲得超4個贊

正如評論中已經提到的,發布的數據的格式與passlib不同:passlib格式解釋如下。鹽和哈希(校驗和)是 Base64 編碼的。使用了一種特殊的 Base64 變體,其解釋如下:Padding(?=) 和空格被省略并被.應用+。

另一方面,發布數據的哈希值是標準 Base64 編碼(即用+代替.)和填充 (?=)。此外,鹽是 UTF8 解碼的。

如果考慮到這一點,鹽和哈希值是相同的。以下代碼從發布的數據中確定passlib數據,并比較 salt 和 hash,其中發布的數據的 salt 和 hash 以passlib格式顯示(即使用passlib?Base64 變體和 Base64 編碼的 salt):

from passlib.hash import pbkdf2_sha256

from base64 import b64decode

from passlib.utils.binary import ab64_encode


def hashAndCompare(crackedHash):

? ??

? ? crackedChain = crackedHash.split('$')? ?

? ? #crackedChainDigest = crackedChain[0]

? ? crackedChainRounds = crackedChain[1]

? ? crackedChainSalt = crackedChain[2]

? ? crackedChainSaltPasslibFormat = ab64_encode(crackedChainSalt.encode('utf8')).decode('utf8')

? ? crackedChainHashData = crackedChain[3].split(':')

? ? crackedChainHash = crackedChainHashData[0]

? ? crackedChainHashPasslibFormat = ab64_encode(b64decode(crackedChainHash)).decode('utf8')

? ? crackedChainData = crackedChainHashData[1]

? ??

? ? passlibHash = pbkdf2_sha256.hash(crackedChainData, rounds=crackedChainRounds, salt=crackedChainSalt.encode('utf8'))?

? ? passlibChain = passlibHash.split('$')

? ? passlibChainSalt = passlibChain[3]

? ? passlibChainHash = passlibChain[4]

? ??

? ? print('Passlib: Hash: {0} Salt: {1}\nCracked: Hash: {2} Salt: {3}\n'.format(passlibChainHash, passlibChainSalt, crackedChainHashPasslibFormat, crackedChainSaltPasslibFormat))


hashAndCompare('pbkdf2_sha256$10000$005OtPxTXhPq$K/2GplWPJsBVj+qbgdKW8YEteQyUkIiquT5MaOhPo4Y=:harry')

hashAndCompare('pbkdf2_sha256$10000$00Qhibr5Mbeg$l9grYueDrl3qN3NA7e9j5PodgV1XkGTz0Z6ajhF99AY=:radio')

hashAndCompare('pbkdf2_sha256$10000$00h7h0g1ZKE1$YEobSm/y+cFg/VXhU4gGYJ6eOkZ68jhJ5axDu68Dack=:momo')

hashAndCompare('pbkdf2_sha256$10000$01JMkfGk1RXh$vD+GGZshw5kExtZOpl5+Lht3xECULdbNVOesoTicxto=:fred')

hashAndCompare('pbkdf2_sha256$10000$01vkw1viCg4J$2hjlbq10Jh/Su3yqjKfYCnCSt1WlKcKJtsqDET618M0=:get')

hashAndCompare('pbkdf2_sha256$10000$01wayF5JLVSZ$2/9COWqb6SZG/raqabtU8fNBzkrt2puN7SaKw0U7jBs=:987456321')

鹽和哈希值與一致的編碼相同:


Passlib: Hash: K/2GplWPJsBVj.qbgdKW8YEteQyUkIiquT5MaOhPo4Y Salt: MDA1T3RQeFRYaFBx

Cracked: Hash: K/2GplWPJsBVj.qbgdKW8YEteQyUkIiquT5MaOhPo4Y Salt: MDA1T3RQeFRYaFBx


Passlib: Hash: l9grYueDrl3qN3NA7e9j5PodgV1XkGTz0Z6ajhF99AY Salt: MDBRaGlicjVNYmVn

Cracked: Hash: l9grYueDrl3qN3NA7e9j5PodgV1XkGTz0Z6ajhF99AY Salt: MDBRaGlicjVNYmVn


Passlib: Hash: YEobSm/y.cFg/VXhU4gGYJ6eOkZ68jhJ5axDu68Dack Salt: MDBoN2gwZzFaS0Ux

Cracked: Hash: YEobSm/y.cFg/VXhU4gGYJ6eOkZ68jhJ5axDu68Dack Salt: MDBoN2gwZzFaS0Ux


Passlib: Hash: vD.GGZshw5kExtZOpl5.Lht3xECULdbNVOesoTicxto Salt: MDFKTWtmR2sxUlho

Cracked: Hash: vD.GGZshw5kExtZOpl5.Lht3xECULdbNVOesoTicxto Salt: MDFKTWtmR2sxUlho


Passlib: Hash: 2hjlbq10Jh/Su3yqjKfYCnCSt1WlKcKJtsqDET618M0 Salt: MDF2a3cxdmlDZzRK

Cracked: Hash: 2hjlbq10Jh/Su3yqjKfYCnCSt1WlKcKJtsqDET618M0 Salt: MDF2a3cxdmlDZzRK


Passlib: Hash: 2/9COWqb6SZG/raqabtU8fNBzkrt2puN7SaKw0U7jBs Salt: MDF3YXlGNUpMVlNa

Cracked: Hash: 2/9COWqb6SZG/raqabtU8fNBzkrt2puN7SaKw0U7jBs Salt: MDF3YXlGNUpMVlNa


查看完整回答
反對 回復 2023-09-12
?
GCT1015

TA貢獻1827條經驗 獲得超4個贊

該格式由 Django 使用,并且 passlib 有該格式的函數:Django 1.4 Hashes。

所以,我在 python 的 shell 中這樣做了:

>>> from passlib.hash import django_pbkdf2_sha256

>>> secret = 'harry'

>>> hash = 'pbkdf2_sha256$10000$005OtPxTXhPq$K/2GplWPJsBVj+qbgdKW8YEteQyUkIiquT5MaOhPo4Y='

>>> django_pbkdf2_sha256.verify(secret, hash)

True

>>> rounds = hash.split('$')[1]

>>> salt = hash.split('$')[2]

>>> django_pbkdf2_sha256.hash(secret, rounds=rounds, salt=salt) == hash

True


查看完整回答
反對 回復 2023-09-12
  • 2 回答
  • 0 關注
  • 715 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號