https://github.com/patwie/scramble
Obfuscate integers
https://github.com/patwie/scramble
golang golang-library golang-package obfuscation
Last synced: 3 months ago
JSON representation
Obfuscate integers
- Host: GitHub
- URL: https://github.com/patwie/scramble
- Owner: PatWie
- License: apache-2.0
- Created: 2022-01-08T11:06:17.000Z (almost 4 years ago)
- Default Branch: main
- Last Pushed: 2022-01-08T14:55:53.000Z (almost 4 years ago)
- Last Synced: 2025-06-26T05:03:38.545Z (4 months ago)
- Topics: golang, golang-library, golang-package, obfuscation
- Language: Go
- Homepage:
- Size: 12.7 KB
- Stars: 3
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Go implementation of Pseudo encrypt
An implementation that scrambles id and encodes them as a string, similar to
(Instagram/YouTube id encodings).
All functions are *bijective* functions (on the positive domain), ie. they will
shuffle all integers from int32 (resp. int64) with zero collisions and can be undone.Implements the postgresql [pseudo encrypt](https://wiki.postgresql.org/wiki/Pseudo_encrypt).
```
Scramble32(x)x | pseudo_encrypt
-----+----------------
-10 | -1270576520
-9 | -236348969
-8 | -1184061109
-7 | -25446276
-6 | -1507538963
-5 | -518858927
-4 | -1458116927
-3 | -532482573
-2 | -157973154
-1 | -1105881908
0 | 1777613459
1 | 561465857
2 | 436885871
3 | 576481439
4 | 483424269
5 | 1905133426
6 | 971249312
7 | 1926833684
8 | 735327624
9 | 1731020007
10 | 792482838
```For convenience, these numbers can be encoded as strings (Instagram/YouTube like id encodings).
```go
encoding := scramble.AlphabethEncoder32{Alphabeth: scramble.AlphaNumeric}
slug:= encoding.Encode( scramble.Scramble32(4) ) // returns "NTySG"
originalID:= Unscramble32(encoding.Decode(slug)) // gives 4
```See `readme_test.go`
## Using the Interface
```go
import(
"github.com/go-scramble/scramble"
)func example(){
obscurer := NewObscurer64(CharsetEncoder64{Charset: AlphaNumeric})internalID := int64(4)
urlSlug := obscurer.Obscure(internalID) // "67LllQ9fWvf"
decodedID := obscurer.Unobscure("67LllQ9fWvf") // int64(4)}
```