Náhodné tokeny a tajné kľúče
Náhodné generovanie stojí na random_bytes() a random_int(). Každý generátor validuje dĺžku a namiesto slabej hodnoty vyhodí Random\InvalidLengthException:
use RoundlyConsulting\Crypto\Facades\Crypto;
$bytes = Crypto::random()->bytes(32);
$token = Crypto::random()->token(40); // base64url, ≥32 chars
$digits = Crypto::random()->numeric(6);
$alnum = Crypto::random()->alphanumeric(24);
$code = Crypto::random()->fromAlphabet('ABCDEFGHJKMNPQRSTUVWXYZ23456789', 10);
$secret = Crypto::random()->secret(32); // base32, for TOTP
// Flat shortcuts for the common three:
Crypto::randomBytes(32);
Crypto::randomToken(40);
Crypto::randomSecret(32);Alebo volajte priamo triedy, ktoré fasáda sprístupňuje:
use RoundlyConsulting\Crypto\Random\Bytes;
use RoundlyConsulting\Crypto\Random\Secret;
use RoundlyConsulting\Crypto\Random\Token;
$bytes = Bytes::generate(32);
$token = Token::urlSafe(40); // base64url, ≥32 chars
$digits = Token::numeric(6); // digits only (numeric OTP / recovery code)
$alnum = Token::alphanumeric(24); // 0-9A-Za-z
$code = Token::fromAlphabet('ABCDEFGHJKMNPQRSTUVWXYZ23456789', 10); // no ambiguous characters
$secret = Secret::base32(32); // 32 base32 chars for an authenticator app| Metóda | Výstup | Limity dĺžky |
|---|---|---|
Bytes::generate($length) | Surové CSPRNG bajty. | 1 až 1 MiB (Bytes::MAXIMUM_LENGTH). |
Token::urlSafe($length = 40) | Presne $length znakov base64url. | 32 (Token::MINIMUM_LENGTH) až 4096. |
Token::numeric($length) | Iba číslice, rovnomerne náhodne. | 1 až 4096. |
Token::alphanumeric($length) | 0-9A-Za-z, rovnomerne náhodne. | 1 až 4096. |
Token::fromAlphabet($alphabet, $length) | Rovnomerný výber celých znakov z vašej UTF-8 abecedy. | 1 až 4096; abeceda nesmie byť prázdna a musí byť platné UTF-8. |
Secret::base32($chars = 32) | Base32 tajný kľúč, ktorý prijmú Totp, Hotp aj Base32::decode(). | 1 až 4096 (Secret::MAXIMUM_CHARS); pri 1, 3 alebo 6 (mod 8) o jeden znak viac. |
Horné limity zaručujú, že naviazanie dĺžky na nedôveryhodný vstup nikdy nespôsobí DoS pamäte ani CPU.
fromAlphabet() prijíma text v UTF-8 a vyberá celé znaky, takže viacbajtová abeceda („äöü“, emoji) dá platné UTF-8 s presne požadovaným počtom znakov; abeceda, ktorá nie je platné UTF-8, vyhodí InvalidLengthException.
Secret::base32() — aj Crypto::random()->secret() / randomSecret() — vždy vráti tajný kľúč, ktorý prijmú Totp, Hotp aj Base32::decode(). Dĺžka 1, 3 alebo 6 (mod 8) nemá kanonickú podobu base32, preto sa taká požiadavka zaokrúhli nahor o jeden znak (17 → 18 znakov); každá iná dĺžka je presná. Zaokrúhlenie nahor zachová aspoň požadovanú entropiu.
Prejavte lásku k open source
Tento balík je zadarmo pod licenciou MIT. Ak vám šetrí čas, jednorazový príspevok alebo členstvo na Patreone nám pomôže ho ďalej udržiavať, testovať a dokumentovať.
Ďalšie spôsoby podpory vrátane kryptomienOdoslaním daru súhlasíte s našimi podmienkami prijímania darov.
Chcete to zabudovať do svojho produktu?
Naše balíky integrujeme do zákazkových Laravel a AI riešení. Napíšte nám, na čom pracujete, a ozveme sa do 48 hodín.