Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
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: 21 days 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 (almost 6 years ago)
- Default Branch: main
- Last Pushed: 2024-03-07T00:56:04.000Z (9 months ago)
- Last Synced: 2024-03-15T06:04:12.411Z (8 months ago)
- Topics: elixir, hashing, knuth-algorithm, obfuscation
- Language: Elixir
- Size: 28.3 KB
- Stars: 3
- Watchers: 1
- Forks: 3
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
# OptimusHash
[![hex.pm](https://img.shields.io/hexpm/v/optimus_hash.svg?style=flat)](https://hex.pm/packages/optimus_hash)
[![Continuous Integration](https://github.com/smartvokat/optimus_hash/actions/workflows/ci.yaml/badge.svg)](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.