與我冒險到安全之地進展緩慢,我已經打了又一個障礙,我不能完全圍繞讓我的頭。基本上我試圖讓我的Android應用程序儘可能安全的登錄系統。我打算儘快去SSL,但我想覆蓋所有情況(如cookie劫持),因此我不希望用戶以純文本格式發送密碼。我知道SSL會照顧到這一點,但爲什麼不鎖定你的前門,並保持你的護照安全。BCrypt鹽:鹽無效長度
不管怎麼說,我做的是存儲在SQL數據庫每個用戶的唯一鹽,檢索這在登錄嘗試,散列這種鹽的用戶密碼和交叉檢查服務器上。
我遇到的問題是我的唯一鹽在PHP中使用的代碼
$salt = base64_encode(mcrypt_create_iv(16, MCRYPT_DEV_URANDOM));
創建
我再追加「$ 2A $ 10個$」,降低了$鹽的長度爲22個字符以匹配BCrypt.gensalt()輸出。例如,這兩個鹽的計算可以返回
$salt = $2a$10$TGnr99x6uS2TexsSl0Xw==
BCrypt.gensalt() = $2a$10$hGSvqpfbuG4Y7JbSTZaV..
當我使用hashns與gensalt(),哈希工作正常。但是,當我用我獨特的鹽,我拋出了無效鹽距離的誤差:
10-04 22:25:41.262 9093-9093/com.example.version02 E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.example.version02, PID: 9093
java.lang.IllegalArgumentException: Bad salt length
at org.mindrot.jbcrypt.BCrypt.crypt_raw(BCrypt.java:622)
at org.mindrot.jbcrypt.BCrypt.hashpw(BCrypt.java:692)
at com.example.version02.Login$1.onClick(Login.java:90)
at android.view.View.performClick(View.java:5156)
at android.view.View$PerformClick.run(View.java:20755)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:145)
at android.app.ActivityThread.main(ActivityThread.java:5832)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194)
誰能明白我doign錯了嗎?是不是很簡單,我最終會在自己的眼中戳一下?
@ Michu93你真的編輯'wasn't'到'是not'上一個帖子說的(哎呀我的意思是說'is')2歲了嗎?你是否想爲自己贏得新的徽章? – AranDG
不,對獲得徽章不感興趣。編輯的代碼,但我也需要6個字符來改變,這是人工的原因不是 - >不是 – Michu93