Weave Code
Code Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message
Password Hasher

Password Hasher Laravel Package

symfony/password-hasher

Symfony PasswordHasher provides secure password hashing and verification utilities. Configure multiple algorithms via PasswordHasherFactory (bcrypt, sodium/Argon2, etc.), hash plain passwords, verify hashes, and support upgrades with modern best practices.

View on GitHub
Deep Wiki
Context7

The Symfony PasswordHasher component provides robust utilities for hashing and verifying passwords using modern, secure algorithms. It offers a flexible API centered around a PasswordHasherFactory, making it easy to configure multiple hashers and select the right one per context (e.g., standard vs memory-hard).

Use it to generate strong hashes and safely validate user credentials while keeping algorithm choices and options centralized.

  • Configure multiple hashing algorithms via PasswordHasherFactory
  • Built-in support for bcrypt and sodium (memory-hard) hashing
  • Simple APIs to hash plain passwords and verify hashes
  • Promotes secure, consistent password handling across applications
Frequently asked questions about Password Hasher
How do I integrate Symfony PasswordHasher into Laravel instead of the default Hash facade?
You’ll need to create a custom service provider to wrap Symfony’s `PasswordHasherFactory` and implement Laravel’s `HashContract`. Replace `Hash::make()` and `Hash::check()` calls with your adapter, which delegates to the factory. For example, use `getPasswordHasher()` to select algorithms dynamically (e.g., bcrypt for users, Argon2 for admins). Existing Laravel apps may require minimal changes if you alias the default bcrypt hasher.
Does Symfony PasswordHasher support Laravel’s built-in `Hash::needsRehash()` for auto-upgrading hashes?
No, but you can replicate this behavior by checking the hash prefix (e.g., `argon2id$` or `bcrypt$`) and comparing it against your configured algorithms. Symfony’s `needsRehash()` is algorithm-specific, so you’d need to extend your adapter to implement this logic. For example, verify if the hash’s algorithm is outdated or if a stronger option is now available in your factory.
Can I use Argon2 with Symfony PasswordHasher in Laravel, and what are the database requirements?
Yes, Argon2 is supported, but your database must accommodate longer hashes (e.g., `VARCHAR(255)` for Argon2id). If your schema uses shorter fields (e.g., `VARCHAR(60)` for bcrypt), you’ll need to migrate or use a polyfill. Symfony’s Argon2 hasher generates outputs like `argon2id$v=19$m=65536...`, which are significantly longer than bcrypt’s 60-character hashes. Test your schema with `strlen($hash)` before deployment.
What Laravel versions are compatible with symfony/password-hasher, and are there PHP version requirements?
Symfony PasswordHasher requires PHP 8.1+ and works with Laravel 9.x+. If you’re on Laravel 8.x, ensure PHP 8.0+ and check for Symfony component compatibility, as newer versions may drop support for older PHP. For example, Argon2 requires PHP 7.2+, but Symfony’s latest versions target PHP 8.1+. Always verify `composer.json` constraints for your Laravel version.
How do I configure multiple hashing algorithms (e.g., bcrypt for users, Argon2 for admins) in Laravel?
Use Symfony’s `PasswordHasherFactory` with a custom Laravel service provider. Define algorithms in an array (e.g., `['user' => ['algorithm' => 'bcrypt'], 'admin' => ['algorithm' => 'argon2id']]`) and inject the factory into your adapter. In your `HashContract` implementation, pass the algorithm name as an option to `getPasswordHasher()` (e.g., `Hash::make($password, ['algorithm' => 'admin'])`).
Will Symfony PasswordHasher break existing bcrypt hashes in my Laravel app?
No, Symfony’s bcrypt implementation is compatible with Laravel’s existing hashes. The factory can alias bcrypt as the default, ensuring seamless verification. However, if you enable auto-upgrades (e.g., to Argon2), you’ll need to handle migration logic separately. Always test with `Hash::check()` on a sample of existing hashes before full deployment.
Are there performance implications for using Argon2 in production, and how can I optimize it?
Argon2’s memory-hard parameters (e.g., `m=65536`) can slow down verification, especially on high-traffic endpoints. Optimize by reducing memory usage (e.g., `m=16384`) or using a lighter algorithm like bcrypt for non-sensitive accounts. Symfony allows tuning via factory options (e.g., `['algorithm' => 'argon2id', 'memory_cost' => 16384]`). Benchmark with `microtime()` to ensure verification stays under 50ms for your use case.
Is there a Laravel package that simplifies Symfony PasswordHasher integration, or do I need to build my own adapter?
Yes, consider `spatie/laravel-password-hasher`, which provides a Laravel-compatible wrapper for Symfony’s component. It handles service provider registration, HashContract implementation, and common edge cases (e.g., hash format validation). If you need custom logic (e.g., tiered algorithms), you can extend Spatie’s adapter or build your own. Always check for updates, as Spatie’s package may evolve alongside Symfony.
How do I handle legacy hashes (e.g., SHA-1, MD5) when migrating to Symfony PasswordHasher?
Symfony PasswordHasher doesn’t support legacy algorithms, so you’ll need a pre-migration step. Use Laravel’s `Hash::check()` to verify legacy hashes, then rehash them with Symfony’s factory (e.g., bcrypt or Argon2). Store the new hashes in a temporary column, then drop the legacy column after validation. For large datasets, batch the process and log failures for manual review.
Can I use Symfony PasswordHasher for password reset tokens or other non-authentication hashing needs?
While Symfony PasswordHasher is optimized for authentication, you can repurpose it for tokens or other secrets by configuring a dedicated algorithm (e.g., `['token' => ['algorithm' => 'sodium']]`). However, tokens often require shorter-lived security (e.g., HMAC instead of Argon2). For tokens, consider `symfony/security-csrf` or `phpseclib` for specialized use cases. Always validate the tradeoffs between security and performance for your specific use case.
Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
davejamesmiller/laravel-breadcrumbs
artisanry/parsedown
christhompsontldr/phpsdk
enqueue/dsn
bunny/bunny
enqueue/test
enqueue/null
enqueue/amqp-tools
milesj/emojibase
bower-asset/punycode
bower-asset/inputmask
bower-asset/jquery
bower-asset/yii2-pjax
laravel/nova
spatie/laravel-mailcoach
spatie/laravel-superseeder
laravel/liferaft
nst/json-test-suite
danielmiessler/sec-lists
jackalope/jackalope-transport