https://github.com/smartvokat/optimus_hash
ID hashing based on Knuth's multiplicative hashing algorithm
https://github.com/smartvokat/optimus_hash
elixir hashing knuth-algorithm obfuscation
Last synced: about 1 month ago
JSON representation
ID hashing based on Knuth's multiplicative hashing algorithm
- Host: GitHub
- URL: https://github.com/smartvokat/optimus_hash
- Owner: smartvokat
- License: mit
- Created: 2019-01-28T21:20:32.000Z (over 6 years ago)
- Default Branch: main
- Last Pushed: 2024-03-07T00:56:04.000Z (about 1 year ago)
- Last Synced: 2025-03-19T11:17:00.289Z (about 1 month ago)
- Topics: elixir, hashing, knuth-algorithm, obfuscation
- Language: Elixir
- Size: 28.3 KB
- Stars: 3
- Watchers: 0
- Forks: 3
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
# OptimusHash
[](https://hex.pm/packages/optimus_hash)
[](https://github.com/smartvokat/optimus_hash/actions/workflows/ci.yaml)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](https://hexdocs.pm/optimus_hash/absinthe-relay.html#content).
## Installation
The package can be installed by adding `optimus_hash` to your list of dependencies in `mix.exs`:
```elixir
def deps do
[
{:optimus_hash, "~> 0.1.0"}
]
end
```# Usage
```elixir
# 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.](https://hexdocs.pm/optimus_hash)
# Acknowledgements
This library is based on the [Go package](https://github.com/pjebs/optimus-go) which in turn is based on the [PHP library](https://github.com/jenssegers/optimus).
# Alternatives
There are other methods to obfuscated IDs available:
* [Hashids](https://hashids.org/) ([Elixir](https://github.com/alco/hashids-elixir))
* [NanoID](https://github.com/ai/nanoid) ([Elixir](https://github.com/railsmechanic/nanoid))Choose one based on the properties (e.g. speed or output) you are looking for.