Python wpa_passphrase(Linux二进制文件)实现仅生成部分psk。

4
wpa_passphrase "testing" "testingpassword"network={
    ssid="testing"
    #psk="testingpassword"
    psk=ae9400eac47807861c32f6b2d52434594fe1f1cbbd5ae0d89d5199ea5e4c79aa
}

我按照维基百科文章的指引写了一个Python脚本,用于计算WPA PSK:

https://en.wikipedia.org/wiki/Wi-Fi_Protected_Access#Target_users_.28authentication_key_distribution.29

示例代码如下:

import hashlib, binascii
def wpa_psk(ssid, password):
    dk = hashlib.pbkdf2_hmac('sha1', str.encode(password), str.encode(ssid), 4096)
    return (binascii.hexlify(dk))

print((wpa_psk("testing", "testingpassword")))

输出:b'ae9400eac47807861c32f6b2d52434594fe1f1cb'

这是由wpa_passphrase工具生成的psk的一部分。缺少什么?


我在那篇维基百科文章中没有看到任何指示。我想我对你试图完成的任务感到困惑。你是想接收一个psk然后将其转换为哈希值吗? - Joe
缺少的是在https://docs.python.org/2/library/hashlib.html#key-derivation中描述的(非默认值的)关键字参数dklen。 - dave_thompson_085
3个回答

4

现在或许有点晚了,我看到这个问题,你可以这样做:

import hashlib, binascii

def wpa_psk(ssid, password):
    dk = hashlib.pbkdf2_hmac(
        'sha1',
        str.encode(password),
        str.encode(ssid),
        4096,
        256
    )
    return (binascii.hexlify(dk))

print((wpa_psk('testing', 'testingPassword')[0:64].decode('utf8')))

输出结果为:

131e1e221f6e06e3911a2d11ff2fac9182665c004de85300f9cac208a6a80531

您可以将此内容制作为脚本:
import hashlib, binascii
from getpass import getpass

def wpa_psk():
    '''
    Encrypt password using ssid and password for WPA and WPA2
    '''
    ssid=input("SSID: ")
    dk = hashlib.pbkdf2_hmac(
        'sha1', str.encode(getpass("Password: ")),
        str.encode(ssid), 4096, 32
    )
    print(binascii.hexlify(dk).decode("UTF-8"))

3
调用 hashlib.pbkdf2_hmac() 函数时,唯一遗漏的是指定 dklen 参数。该参数应设置为32。
import hashlib, binascii
def wpa_psk(ssid, password):
    dk = hashlib.pbkdf2_hmac('sha1', str.encode(password), str.encode(ssid), 4096, 32)
    return (binascii.hexlify(dk))

print((wpa_psk("testing", "testingpassword")))

2

在经过长时间的互联网搜索后,我终于找到了psk.py。它能够从SSIDPassphrase计算出PSK。请查看 :-)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接