Skip to content

ID hashing based on Knuth's multiplicative hashing algorithm

License

Notifications You must be signed in to change notification settings

smartvokat/optimus_hash

Repository files navigation

OptimusHash

hex.pm Continuous Integration

A small library to obfuscated integers based on Knuth's multiplicative hashing algorithm. The algorithm is fast, reversible and has zero collisions.

This comes in very handy when you have e.g. integer-based primary keys in your database and you don't want to expose them to the outside world.

The library integrates well with Absinthe.Relay.

Installation

The package can be installed by adding optimus_hash to your list of dependencies in mix.exs:

def deps do
  [
    {:optimus_hash, "~> 0.1.0"}
  ]
end

Usage

# This are just example values. Do not use them in production.
o = OptimusHash.new(prime: 1_580_030_173, mod_inverse: 59_260_789, random: 1_163_945_558)

OptimusHash.encode(o, 15) # = 1103647397
OptimusHash.decode(o, 1103647397) # = 15

View the documentation for more information.

Acknowledgements

This library is based on the Go package which in turn is based on the PHP library.

Alternatives

There are other methods to obfuscated IDs available:

Choose one based on the properties (e.g. speed or output) you are looking for.