- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我尝试编写一个 Python 程序来计算 WPA 握手,但我在哈希方面遇到了问题。为了比较,我安装了 cowpatty (看看我从哪里开始出错)。
我的 PMK 生成工作正常,但 PTK 计算似乎总是错误的。我不确定我是否必须格式化我的输入(macadresses 和 noces) 或只是将它们作为字符串提供给函数。
我会给你我的路由器信息,这没问题,因为我只是为了测试而设置的。
我的程序如下所示:
import hmac,hashlib,binascii
passPhrase = "10zZz10ZZzZ"
ssid = "Netgear 2/158"
A = "Pairwise key expansion"
APmac = "001e2ae0bdd0"
Clientmac = "cc08e0620bc8"
ANonce = "61c9a3f5cdcdf5fae5fd760836b8008c863aa2317022c7a202434554fb38452b"
SNonce = "60eff10088077f8b03a0e2fc2fc37e1fe1f30f9f7cfbcfb2826f26f3379c4318"
B = min(APmac,Clientmac)+max(APmac,Clientmac)+min(ANonce,SNonce)+max(ANonce,SNonce)
data="0103005ffe010900200000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
def customPRF512(key,A,B):
blen = 64
i = 0
R = ''
while i<=((blen*8+159)/160):
hmacsha1 = hmac.new(key,A+chr(0x00)+B+chr(i),sha)
i+=1
R = R+hmacsha1.digest()
return R[:blen]
pmk = pbkdf2(passPhrase, ssid, 4096, 32) #no sourcecode, since b2a_p(pmk) output fits to those of cowpatty
ptk = customPRF512(pmk,A,B) #the prf-function fits the pseudocode in the ieee, but does not give me the correct output (like cowpatty does)
# and i have no idea why :(
print b2a_p(pmk),"\n\n\n"
print b2a_p(ptk),"\n\n\n"
mic1 = hmac.new(ptk[0:16],data)
print mic1.hexdigest() #should be the mic-calculation, not sure if this is correct...
所需的输出(cowpatty 确认)是:
PMK is
01b8 09f9 ab2f b5dc 4798 4f52 fb2d 112e
13d8 4ccb 6b86 d4a7 193e c529 9f85 1c48
Calculated PTK for "10zZz10ZZzZ" is
bf49 a95f 0494 f444 2716 2f38 696e f8b6
428b cf8b a3c6 f0d7 245a d314 a14c 0d18
efd6 38aa e653 c908 a7ab c648 0a7f 4068
2479 c970 8aaa abc3 eb7e da28 9d06 d535
Calculated MIC with "10zZz10ZZzZ" is
4528 2522 bc67 07d6 a70a 0317 a3ed 48f0
也许你们中有人可以告诉我,为什么我的程序根本不起作用。 hmac 函数是否正常工作?我的输入格式错误吗?我必须在任何地方考虑字节顺序吗?感谢您提前抽出时间,如有任何帮助,我将不胜感激!
最佳答案
好吧,我自己弄明白了……更多的是通过绝望的测试和一些运气,而不是成功的研究,这导致没有足够长的时间。我没有使用 MAC 地址和随机数作为字符串,而是不得不解开它们。我用过
a2b_hex() #alternatively unhexlify()
我的最终代码看起来有点像这样,不包括 defs:
import hmac,hashlib,binascii
passPhrase="10zZz10ZZzZ"
ssid = "Netgear 2/158"
A = "Pairwise key expansion"
APmac = a2b_hex("001e2ae0bdd0")
Clientmac = a2b_hex("cc08e0620bc8")
ANonce = a2b_hex("61c9a3f5cdcdf5fae5fd760836b8008c863aa2317022c7a202434554fb38452b")
SNonce = a2b_hex("60eff10088077f8b03a0e2fc2fc37e1fe1f30f9f7cfbcfb2826f26f3379c4318")
B = min(APmac,Clientmac)+max(APmac,Clientmac)+min(ANonce,SNonce)+max(ANonce,SNonce)
data = a2b_hex("0103005ffe01090020000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000")
pmk = pbkdf2(passPhrase, ssid, 4096, 32)
ptk = customPRF512(pmk,A,B)
mic = hmac.new(ptk[0:16],data)
print "desiredpmk:\t","01b809f9ab2fb5dc47984f52fb2d112e13d84ccb6b86d4a7193ec5299f851c48"
print "pmk:\t\t",b2a_hex(pmk),"\n"
print "desired ptk:\t","bf49a95f0494f44427162f38696ef8b6"
print "ptk:\t\t",b2a_hex(ptk[0:16]),"\n"
print "desired mic:\t","45282522bc6707d6a70a0317a3ed48f0"
print "mic:\t\t",mic.hexdigest(),"\n"
所以我的问题的答案是:是的,哈希函数工作正常,是的,输入格式错误,不,没有字节顺序问题。
关于python - wpa-handshake with python - 散列困难,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12018920/
我正在从不同来源获取新闻提要并添加到数据库,但我遇到异常 Error: Cannot enqueue Handshake after already enqueuing a Handshake. at
嘿,大家好,我只是想制作一个简单的表单,将数据发送到 mySQL 数据库。我的问题是提交后我无法再提交另一份。它只允许我提交表单一次,然后在第二次提交后,我收到此错误“错误:在已经排队握手后无法排队握
我正在尝试将 VisualVM 连接到远程 JMX。 IntelliJ 可以轻松连接,但 VisualVM 失败并在日志输出中显示以下内容: Listening for transport dt_so
我每 5 秒查询一个表并向用户显示。我使用的是mysql 8。应用程序是nodejs。 var con = mysql.createConnection({ host: "localhost",
我正在尝试创建两个函数,一个从 SQL 数据库检索对象,另一个将对象保存到同一个 SQL 数据库。我使用 node.js 和 mysql 来执行此操作。我有两个函数,fetchEmployee 和 E
我正在尝试通过运行命令 ./mvnw compile quarkus:dev 来调试基本的 Quarkus 应用程序在 IntelliJ 上(如 Quarkus 文档中所述)并且它似乎运行正常(给我以
我正在开发一个由 IIS 10 托管的 .Net Core (3.1) Web 应用程序。当我尝试在本地主机上使用 SignalR 时,我能够完全正常连接并从后端接收消息,但是在我将其发布到 IIS
我最近从 AWS ELB 切换到 HAProxy。我正在负载均衡器 (HAProxy 1.5dev19) 上终止 SSL。 自切换以来,我不断在 HAProxy 日志中收到一些 SSL 连接错误(占请
我编写了一个系统,可以自动在 Microsoft Azure 上部署 VM,在上面安装 Sql Server,然后针对新安装的服务器执行 .sql 脚本以初始化环境。周五,这一切都按预期进行。今天,我
我尝试使用 Hyperledger 版本 2.0.0 将我的 Golang 后端连接到正在运行的 Hyperledger 网络... 我在运行“docker-compose up”时看到这个 Serv
我在安装我们的内部产品时遇到 SSL 配置问题。安装在jboss-eap-6.1.上,使用java-1.7.0-openjdk-1.7.0.85.x86_64 日志说: 16:28:11,685 DE
我做到了 import requests url = "https://randomuser.me/api/" data = requests.get(url).json() print data 我
我正在运行为 HTTP/2 客户端提供的代码 Jetty https://github.com/eclipse/jetty.project/blob/master/jetty-http2/http2-
我需要在使用命名管道与其他进程通信的小型 Linux 程序中实现握手类型协议(protocol)。我已经在使用命名管道时搜索了握手类型协议(protocol)的一般实现模式,但我无法打开任何东西...
我安装了 Docker 版本“Docker 版本 19.03.8,构建 afacb8b”,当我尝试使用 docker pull 命令时,如“docker pull mcr.microsoft.com/
我正在使用 python asynchat 来实现网络协议(protocol)。在连接时,我需要发送命令,服务器通过 session 进行应答。 我的主要问题是我需要等待直到收到 session 响应
握手完成后,我在握手时调用 getPeerCertificates() (socket.getHandshakeSession()) 我正在使用 setNeedClientAuth(true)在服务器
我在 logstash-forward 和 logstash 之间有问题,我已经正确安装了 SSL 证书,但是我有这个错误: Failed to tls handshake with 111.111.
本文整理了Java中us.ihmc.robotDataLogger.handshake.YoVariableHandshakeParser类的一些代码示例,展示了YoVariableHandshake
我是 R 语言的新手 并且正在使用 RConnection 在 java 中尝试一个简单的程序,但它给出了这个异常 org.rosuda.REngine.Rserve.RserveException:
我是一名优秀的程序员,十分优秀!