将PasswordDeriveBytes功能转换为Python

2024-09-28 03:22:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试使用pycryptome的KDF模块在python中重新创建PowerShell的PasswordDeriveBytes方法。在

我现在不能通过的主要问题是在Python中获得正确的DerivedKey结果,这是我从PowerShell获得的。在

参数:

password = '1234567890'
salt = '0987654321'
length = 16
iterations = 2

POWERSHELL代码示例:

^{pr2}$

结果:

C937511EBDBE12C7A0FCC8D6CB42BEDC 

*注意:上面的PowerShell代码是从https://github.com/PowerShellMafia/PowerSploit/blob/master/ScriptModification/Out-EncryptedScript.ps1修改而来的。我试图在下面的Python代码中重新实现功能。在

PYTHON代码:

from Crypto.Protocol import KDF
from Crypto.Hash import SHA1

def password_derive_key(password, salt, length, count):
    return KDF.PBKDF2(password, salt, length, count)

def main():
    derivedKey = password_derive_key('1234567890', '0987654321', 16, 2)
    print derivedKey.encode('hex')

if __name__ == "__main__":
    main()

结果:

5a3f103f5dc4558f8dca5d5b145ed0b4

我唯一能想到的是PasswordDeriveBytes的“.GetBytes”方法生成的结果与pycryptodome的KDF模块不同。在

任何帮助都将不胜感激。在


Tags: 模块方法代码fromimportmaindefpassword
1条回答
网友
1楼 · 发布于 2024-09-28 03:22:59

参数必须相同,在问题代码中迭代不同:

POWERSHELL迭代:2
System.Security.Cryptography.PasswordDeriveBytes('1234567890', $AsciiEncoder.GetBytes('0987654321'), "SHA1", 2);

PYTHON迭代:1000
derivedKey = password_derive_key('1234567890', '0987654321', 16, 1000)

确保每一个都使用了正确的编码。在

注意:使用函数作为参数会使调试更加困难,例如:$AsciiEncoder.GetBytes('0987654321')。在

相关问题 更多 >

    热门问题