Is Argon2 actually better than Bcrypt?
Is Argon2 actually better than Bcrypt?
This blog post was published on March 22, 2026.
The first rule of user passwords is never store them as plain text. The second rule is to use<br>Bcrypt. Argon2 is a newer algorithm that gets recommended over Bcrypt, but the main principle is<br>still the same: use a slow hashing algorithm that's designed for passwords.
But, why is Argon2 better than Bcrypt? On the surface, Argon2 has less foot-guns that Bcrypt.<br>Bcrypt has a maximum password length of 72 bytes and that 72 bytes needs to be a null-terminated<br>string. Argon2 on the other hand doesn't have a password length limit and works with any binary<br>data. I think this alone is a good enough reason to use Argon2 over Bcrypt. Still, newer<br>algorithms aren't always more secure. Is it possible that Argon2 is weaker than Bcrypt?
Password hashing generally needs to complete<br>Password cracking is mostly done with GPUs these days because they're much better at hashing than<br>CPUs. Hashing is just a series of small computation and the GPU's many tiny compute units excel at<br>these kind of work. The table below shows hashing speeds of SHA-256, a fast and simple hashing<br>algorithm, between different hardware. The CPU benchmarks were ran using Go's<br>crypto/sha2<br>standard library package and GPU benchmarks are from publicly available benchmarks. The device<br>cost is either the rough second-hand market price or the retail price, whichever is cheaper.
Note that all GPU benchmarks referenced in this blog post were collected from the internet and<br>published by different users. I highly doubt that the data is outright fake but it is still<br>possible that some data is inaccurate.
SHA-256 hashing performance
Device<br>Hashing speed<br>(hashes per second)<br>Cost<br>(hashes per second per dollar)<br>Power efficiency<br>(hashes per second per watt)
Hetzner CCX23 (CPU)<br>40,365,462
MacBook Air M1 8 cores (CPU, 2020)<br>90,800,749<br>302,669<br>3,026,691
MacBook Pro M3 Pro 11 cores (CPU, 2023)<br>171,638,888<br>156,177<br>5,721,296
GTX 1080 (GPU, 2016)<br>2,439,500,000<br>16,263,333<br>13,552,777
RTX 5090 (GPU, 2025)<br>28,353,300,000<br>14,183,741<br>48,885,000
The CPU numbers can be improved further but we see that GPUs are 50 to 100 times faster and 5 to<br>10 times more efficient.
The design of Argon2 attempts to close this gap by using a significant amount of memory. Argon2<br>can be configured to use anywhere from a few kilobytes to gigabytes of memory per hash. While GPUs<br>are fast at pure computation, its memory (VRAM) has a limit on how fast it can transfer data<br>(memory bandwidth) like regular RAM. Argon2's massive memory usage bottlenecks the GPU's memory<br>bandwidth and puts a hard limit on how fast the GPU can calculate hashes. The faster L1 and L2<br>cache aren't useful either as these aren't large enough to handle multiple processes at once.<br>Additionally, once you set the memory configuration high enough, the GPU quickly runs out of<br>memory for more processes and has to put many of its compute units in idle.
Argon2 has 3 parameters: memory size, iteration count, and degree of parallelism. For a memory<br>size m bytes and iteration count t with parallelism set to 1 (single<br>thread), the total number of bytes read and written to memory is calculated by:
(3 × t - 1) × m
For example, Argon2 at 16 mebibytes and 3 iterations will read and write approximately 128<br>mebibytes. Argon2 also has 3 variations (Argon2i, Argon2d, Argon2id) to be exact but they have<br>similar performance when using the same parameters so I'll be grouping them as the same algorithm.
The table below shows the estimated hashing speed based on the GPU's bandwidth and the actual<br>hashing speeds at different memory configuration for the Nvidia GTX 1080 (2016) and Nvidia RTX<br>5090 (2025) GPU. The actual hashing speed are from benchmarks ran with<br>John the Ripper, an open-source password cracking<br>tool.
Memory size<br>Bandwidth-estimated hashing speed<br>(hashes per second)<br>Actual hashing speed<br>(hashes per second)
16 MiB<br>2,441<br>1,742
64 MiB<br>610<br>387
256 MiB<br>153<br>34
Argon2 with varying memory configuration at 3 iterations and 1 degree of parallelism on a GTX<br>1080
Memory size<br>Bandwidth-estimated hashing speed<br>(hashes per second)<br>Actual hashing speed<br>(hashes per second)
16 MiB<br>13,672<br>11,465
64 MiB<br>3,418<br>2,400
256 MiB<br>854<br>178
Argon2 with varying memory configuration at 3 iterations and 1 degree of parallelism on an RTX<br>5090
On both the GTX 1080 and RTX 5090, the benchmark numbers generally align with our estimate at 16<br>mebibytes and 64 mebibytes of memory. As expected, the GPUs also see a linear slowdown as it needs<br>to read and write more bytes. However, the GPU experiences a quadratic slowdown when the memory<br>parameter is increased to 256 mebibytes from 64 mebibytes. This indicates that both GPUs are<br>limited by its memory size at around 64 mebibytes. After this point, the GPU has to do twice the<br>work with half the compute units when the memory requirement doubles. I'm unsure why the GTX 1080<br>sees lower...