Skip to content

Latest commit

 

History

History
47 lines (30 loc) · 1.71 KB

README.md

File metadata and controls

47 lines (30 loc) · 1.71 KB

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.