Kokio tipo stulpelis / ilgis turėčiau naudoti saugoti „Bcrypt“ slaptažodį į duomenų bazę?

Noriu išsaugoti kartotinį slaptažodį (naudojant BCrypt) į duomenų bazę. Kas tai būtų geras tipas ir koks būtų tinkamas ilgis? Ar slaptažodžiai su BCrypt visada yra tokio pat ilgio?

PAKEITIMAS

„Hash“ pavyzdys:

$2a$10$KssILxWNR6k62B7yiX0GAe2Q7wwHlrzhF3LqtVvpyvHZf0MwvNfVu

Po kai kurių slaptažodžių, atrodo, kad BCrypt visada generuoja 60 simbolių maišų.

EDIT 2

Atsiprašome, kad nepaminėte įgyvendinimo. Aš naudoju jBCrypt .

224
04 мая '11 в 12:16 2011-05-04 12:16 „helpermethod “ nustatytas gegužės 04-ąją, 11 val. 12:16 2011-05-04 12:16
@ 4 atsakymai

Bcrypt modulinis kripto formatas susideda iš

  • $2$ , $2a$ arba $2y$ , apibrėžiant maišos algoritmą ir formatą,
  • dviejų skaitmenų reikšmė, žyminti sąnaudų parametrą, po to - $
  • 53 simbolių ilgio su bazine 64 skaitmenų reikšme (jie naudoja abėcėlę . , / , 0 , A - Z , A - Z , kurie skiriasi nuo standartinio bazės 64 kodavimo kodo , kurį sudaro:
    • 22 simboliai druskos (iš viso 128 bitai 132 dekoduoti bitai)
    • 31 simbolis užšifruotos išvesties (iš tikrųjų tik 184 bitai iš 186 dekoduotų bitų)

Taigi bendras ilgis yra atitinkamai 59 arba 60 baitų.

Naudodami 2a formatą, reikės 60 baitų. Todėl MySQL Ill rekomenduojame naudoti CHAR(60) BINARY arba BINARY(60) (žr. _Bin ir dvejetainius duomenis apie skirtumą).

CHAR nėra dvejetainis saugus, o lygybė priklauso ne tik nuo baito vertės, bet ir nuo faktinio kartografavimo; blogiausiu atveju A laikomas lygiu A Daugiau informacijos žr.

286
04 мая '11 в 14:11 2011-05-04 14:11 atsakymą pateikė Gumbo 04 gegužės 11 d. 14:11 2011-05-04 14:11

„Bcrypt“ atributas gali būti saugomas BINARY(40) stulpelyje BINARY(40) .

BINARY(60) , kaip rodo kiti atsakymai, yra paprasčiausias ir natūraliausias pasirinkimas, tačiau, jei norite maksimaliai padidinti saugojimo efektyvumą, galite sutaupyti 20 baitų be nuostolių dekonstruojant maišelį. Aš jį išsamiai aprašiau „GitHub“: https://github.com/ademarre/binary-mcf

Bcrypt hashes seka struktūrą, vadinamą moduliniu kriptu (MCF). Dvejetainis MCF (BMCF) dekoduoja šias tekstines reprezentacijas į labiau kompaktišką dvejetainę struktūrą. Bcrypt atveju, dvejetainis maišymas yra 40 baitų.

„Gumbo“ atliko puikų darbą, paaiškindamas keturis MKC „Bcrypt hash“ komponentus:

border=0
 $<id>$<cost>$<salt><digest> 

BMCF dekodavimas yra toks:

  • $<id>$ gali būti vaizduojamas 3 bitais.
  • <cost>$ 04-31 gali būti pateikiamas 5 bitais. Įdėkite juos 1 baitui.
  • 22 simbolių druska yra (nestandartinė) 128 bitų atvaizdacija. Pagrindinis 64 bitų kodavimas suteikia 16 baitų.
  • 31 simbolių maišytuvas gali būti dekoduotas į bazę-64 iki 23 baitų.
  • Visa tai sujunkite į 40 baitų: 1 + 16 + 23

Daugiau informacijos galite rasti aukščiau esančioje nuorodoje arba ištirti savo „PHP“ diegimą , taip pat „GitHub“.

40
17 мая '13 в 12:09 2013-05-17 12:09 Atsakymą davė Andre D , gegužės 17 d. 13 val. 12:09 2013-05-17 12:09

Nemanau, kad yra jokių tvarkingų gudrybių, kuriuos galite išsaugoti, nes galite tai padaryti, pvz., Naudojant MD5 maišą.

Manau, kad jūsų geriausias variantas yra išsaugoti jį kaip CHAR(60) , nes jis visada yra ilgesnis nei 60 simbolių.

16
04 мая '11 в 12:38 2011-05-04 12:38 Atsakymą davė James C gegužės 4 d. 11 d. 12:38 2011-05-04 12:38

Jei naudojate PHP password_hash() naudodami PASSWORD_DEFAULT algoritmą generuoti bcrypt maišą (kurį norėčiau pasiūlyti daug žmonių, skaitančių šį klausimą), būtinai nepamirškite, kad ateityje password_hash() gali naudoti kitą numatytąjį algoritmą ir todėl gali paveikti maišos ilgį (tačiau tai nebūtinai gali būti daugiau).

Rankiniame puslapyje:

Atkreipkite dėmesį, kad šis konstanta yra skirta laikui bėgant keisti naujus ir galingesnius algoritmus į PHP. Dėl šios priežasties šio identifikatoriaus naudojimo trukmės rezultatas laikui bėgant gali pasikeisti. Todėl rekomenduojama išsaugoti rezultatą duomenų bazės stulpelyje, kuris gali išplėsti daugiau nei 60 simbolių (255 ženklai būtų geras pasirinkimas).

Naudojant „bcrypt“, net jei turite 1 milijardą vartotojų (t. Y. Šiuo metu konkuruojate su „Facebook“), kad galėtumėte išsaugoti maišos baitus su 255 baitais, tai tik ~ 255 GB duomenų - mažo SSD kietojo disko dydis . Labai tikėtina, kad slaptažodžio maišymo išsaugojimas bus kliūtis jūsų programoje. Tačiau, siekiant išvengti to, kad saugojimo vieta iš tikrųjų yra problema dėl bet kokios priežasties, galite naudoti PASSWORD_BCRYPT kad priverstumėte password_hash() naudoti bcrypt, net jei jis nėra numatytasis. Tiesiog nepamirškite pranešti apie visus spragas, rastas bcrypt, ir peržiūrėkite leidinio pastabas kiekvieną kartą, kai išleidžiama nauja PHP versija. Jei numatytasis algoritmas kada nors pasikeitė, būtų gerai analizuoti, kodėl ir priimti pagrįstą sprendimą, ar naudoti naująjį algoritmą.

15
21 июля '15 в 0:30 2015-07-21 00:30 Atsakymą pateikia Mike liepos 21 d. 15 val. 0:30 2015-07-21 00:30

Kiti klausimai apie „ arba „ Užduoti klausimą“