Skip to content

xp-forge/hashing

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

66 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Hashing

Build status on GitHub XP Framework Module BSD Licence Requires PHP 7.0+ Supports PHP 8.0+ Latest Stable Version

Fluent interface to hashing functions provided by PHP, extended with Murmur3.

Examples

Calculate hash for a string, output using base32:

use text\hash\Hashing;

$hash= Hashing::murmur3_32()->new($seed= 0x2a);
$base32= $hash->digest('The quick brown fox jumps over the lazy dog.')->base32();

Incrementally updating hash, output hex (much like the builtin md5() function does):

use text\hash\Hashing;

$hash= Hashing::md5()->new();
while ($stream->available()) {
  $hash->update($stream->read());
}

$hex= $hash->digest()->hex();

Comparing hashes using constant time comparison:

use text\hash\{Hashing, HashCode};

$computed= Hashing::sha256()->digest($req->param('password')); // From request
$stored= HashCode::fromHex($record['password_hash']);          // From database

if ($computed->equals($stored)) {
  // Not susceptible to timing attacks
}

Algorithms

The following algorithms exist as shortcuts inside the entry point class:

  • Hashing::md5()
  • Hashing::sha1()
  • Hashing::sha256()
  • Hashing::sha512()
  • Hashing::murmur3_32()
  • Hashing::murmur3_128()

Other algorithms can be instantiated via Hashing::algorithm(string $name, var... $args), which may raise an IllegalArgumentException if the given algorithm is not available.