Skip to content

Commit 2ea39c1

Browse files
authored
Merge pull request danielmiessler#973 from molangning/patch-php-magic-hash
Patch php magic hash
2 parents edff1c3 + f534524 commit 2ea39c1

File tree

1 file changed

+6
-4
lines changed

1 file changed

+6
-4
lines changed

Passwords/php-hashes/README.md

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# PHP magic hashes
22

3-
PHP has some unique features which makes hash collisions more easier when using the `==` to compare.
3+
PHP has some unique features which makes hash "collisions" more easier when using the `==` to compare.
44

55
The raw text are taken directly from [spaze/hashes](https://github.com/spaze/hashes/)
66

@@ -10,9 +10,9 @@ The raw text are taken directly from [spaze/hashes](https://github.com/spaze/has
1010

1111
Any strings that starts with any numbers of `0`, followed by `e` then ends with only numbers will be treated as zero. An example of such strings are `0e123456` and `00e123456`. [Example code](https://3v4l.org/n8iOp)
1212

13-
This behavior can be extended to numbers, like `'0' == '000`. [Example code](https://3v4l.org/K9QRb)
13+
This behavior can be extended to numbers, like `'0' == '000'`. [Example code](https://3v4l.org/K9QRb)
1414

15-
With loose comparison, these two example strings will equate to each other as both of them are treated as a zero in the backend.
15+
With loose comparison `==`, these two example strings will equate to each other as both of them are treated as a zero in the backend.
1616

1717
Sometimes, hashes of specific strings will result in those special strings as an result. Those hashes are called `magic hashes`
1818

@@ -40,8 +40,10 @@ Descrypt have similar behavior to bcrypt, but passwords are instead truncated to
4040

4141
<!--- Modified from https://github.com/spaze/hashes?tab%253Dreadme-ov-file#pbkdf2-hmac-sha1-pbkdf2-hmac-sha224-pbkdf2-hmac-sha256-->
4242

43+
These are a different kind of magic hashes, they don't need the loose comparison operator `==` and work even with strict comparison `===`.
44+
4345
If you use a password longer than 64 bytes and hash it with PBKDF2-HMAC-SHA1, it is first pre-hashed with SHA1.
4446

4547
For example, `PBKDF2-HMAC-SHA1(password1) === PBKDF2-HMAC-SHA1(password2)` as `sha1(password1) === bin2hex(password2)`.
4648

47-
This behavior can also be seen in `PBKDF2-HMAC-SHA224` and `PBKDF2-HMAC-SHA256`.
49+
This behavior can also be seen in `PBKDF2-HMAC-SHA224` and `PBKDF2-HMAC-SHA256`.

0 commit comments

Comments
 (0)