Skip to content

PatWie/scramble

Repository files navigation

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.

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).

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

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)

}