# OptimusHash

[![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"}

# Usage

# This are just example values. Do not use them in production.
o = 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:

* [Hashids]( ([Elixir](
* [NanoID]( ([Elixir](

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