Mám pocit, že trieda šifrovania produkuje rozdielny výstup zakaždým, keď je rovnaké slovo / reťazec zašifrované, napríklad $this->encrypt->encode("word")
päťkrát by produkovalo päť rôznych kódovaných reťazcov.
Ako môžem pri každom volaní odkazovať na šifrovaný reťazec v dotaze DB $this->encrypt->encode("word")
dáva mi niečo iné?
Opýtal sa iným spôsobom, je tam niečo, čo môžem zašifrovať s tým, že nemá náhodnú hodnotu tak, že zakaždým, keď som zašifrovať dostanem rovnaký výstup pre rovnaký vstup?
odpovede:
2 pre odpoveď č. 1Kódovanie Base64 nie je šifrovanie (odkazujúc na vašu vlastnú odpoveď). Nevyužil som kodér, ale všimol som si jeho doc stránky umožňuje:
$ This-> encrypt-> set_mode ();
Môžete zašifrovať režim ECB (MCRYPT_MODE_ECB) deterministické šifrovanie kde rovnaké údaje vždy zašifrujú na rovnaký ciphertext. Týmto spôsobom zašifrujete vyhľadávací reťazec a bude zodpovedať zašifrovaným údajom v databáze.
To je považované za slabosť režimu ECB, ale v tomto prípade môže byť deterministické správanie to, čo chcete.
1 pre odpoveď č. 2
Myslím, že base64_encode ($ str) je to, čo hľadám.
0 pre odpoveď č. 3
tento kód funguje iba na php 5.5 alebo vyššom
echo password_hash(variable, PASSWORD_DEFAULT);
Prvým parametrom je reťazec hesla, ktorý sa musí hashovať a druhý parameter určuje algoritmus, ktorý by sa mal použiť na generovanie hash.
Predvolený algoritmus je momentálne bcrypt, ale silnejší algoritmus môže byť pridaný ako predvolený neskôr v určitom bode v budúcnosti a môže generovať väčší reťazec. Ak používate PASSWORD_DEFAULT
Vo svojich projektoch nezabudnite uložiť haš do stĺpca, ktorý má kapacitu viac ako 60 znakov. Nastavenie veľkosti stĺpca na 255 môže byť dobrou voľbou. Môžete tiež použiť PASSWORD_BCRYPT
ako druhý parameter. V tomto prípade bude výsledok vždy dlhý 60 znakov.
a skontrolovať heslo hash tu je syntax
<?php
if (password_verify($oldpassword, $hash)) {
// Success!
// the first parameter is your password that"s not yet encrypted, the secode is your password encrypted
}
else {
// Invalid password
}