我目前正在建設一個客戶Authenication包,而無需使用任何庫只是爲了瞭解該協議真的,我送我的計算驗證數據包時,由接入混淆拒絕回答MySQL服務器。 Mysql服務器只是一臺運行在我的計算機上的本地服務器,用於測試目的。這裏是我發送的信息:MySQL協議客戶端/服務器Authenication - 令牌生成從客戶端
測試密碼是'花生'。
階段1個散列 = b14ab480028768cb748fd97de56144a304eb8a1a
階段2哈希 = fd62797ed464c2843942a9167cc0521779d68862 - 這是正確的,但沒有在數據庫中的*。
鹽&階段2哈希 = RC8/$一個VR \ W |?.jN)〜cVcfd62797ed464c2843942a9167cc0521779d68862
SHA1(鹽+ 2階段散列)XOR階段1個散列 = 4B19199ECEB929469EA89C0E942D8D5B9ACBE237
字符串發送到服務器進行驗證,以十六進制:
\ X3A \ X00 \ X00 \ X01 - 斯坦DARD報頭(有效負載長度/序列號)
\ X02 \ X04 \ X80 \ X00 - 兼容性標誌
\ X00 \ X00 \ X00 \ X01 - 最大數據包大小
\ X08 - 字符集
\ X00 \ X00 \ X00 \ X00 \ X00 \ X00 \ X00 \ X00 \ X00 \ X00 \ X00 \ X00 \ X00 \ X00 \ X00 \ X00 \ X00 \ X00 \ X00 \ X00 \ x00 \ x00 \ x00 - 23字節填充符
\ X72 \ x6F \ x6F \ X74 \ X00 - 用戶名零終止
\ X14 - 標記的長度(20個字節)
\ X4B \ X19 \ X19 \ x9E \ XCE \ xB9 \ X29 \ X46 \ x9E \ xA8 \ x9C \ x0E \ X94 \ X2D \ x8D \ x5B \ x9A \ XCB \ XE2 \ X37 - 令牌
當我把這個字符串,服務器剛剛送出#28000訪問被拒絕的錯誤。
這可能是一個訪問權限問題?試圖獲得root訪問權限的遠程用戶,是否需要啓用?
我已經改變WAIT_TIMEOUT/connect_timeout等,並仍然沒有喜悅,這些被設置成60秒]連接超時設置。
我不確定是否應該用星號或不用來計算SHA1(Salt + Stage 2 Hash),就像在數據庫中顯示密碼之前的*一樣。我已經嘗試了兩種方式,但它仍然沒有驗證。
我現在已經沒有想法了,唯一能做的另一件事就是編寫另一個程序來處理客戶端令牌作爲Mysql服務器,但我想我會首先仔細檢查這裏。
我一直在這個工作了一段時間,很難過。
任何幫助非常感謝。我通常不會在論壇發帖,所以它是一種新的體驗,如果我沒有遵守禮節,我會很抱歉。
問候
詹姆斯
好的,謝謝你的快速回復。查看源代碼是我的下一個端口,以模仿auth過程。所以我想我會從那裏開始。請注意:我仍然接受其他建議。 – user2393236
我認爲我發送的關於填充等是正確的,因爲它基本上取自內部網站,請參閱下面的內容:http://dev.mysql.com/doc/internals/en/protocol-examples.html – user2393236
它看起來像儘管它已經被Mysql嗅探併發布在他們的網站上。問題是使用新的auth方法創建的令牌,我不知道我是否正確生成它。我正在下載源文件。順便說一下,該網站參考。位於頂部,第二個客戶端 - >服務器響應。 – user2393236