hashids

可逆的なハッシュ値を得る

ハッシュ値を得るためにはdigest()関数でパラメタにalgo="sha256"などのオプションを指定すれば、いろいろな値が得られる。

しかし、これらのハッシュ値は不可逆な性質を持つので、特にセキュリティを求めるためのハッシュ値でない限りは衝突さえなければよいという考えで、作られたのがhashidsである。

元の値は整数(のベクトル)である。

> hid = hashids::hashids_settings(salt = "salt", min_digit = 8)
> x = c(1,3,5)
> hashids::encode(x, hid)
[1] "k4KixUn8"

16進値からも変換できる。ベクトル内に零が含まれるとエラーになるので、零を含む整数ベクトルは16進変換してから、hashids::encode_hex()すればよい。

零がはいったベクトルはエラーに

> y = c(1,3,5,0)  
> hashids::encode(y, hid)
int[i] <- int[i]%%(ascii_val(substr(last, 1, 1)) + (i - 1)) でエラー: 
  replacement (置き換え) の長さが 0 です 

バイナリからの変換の場合はencodeではなくencode_hex

> y %>% BMS::bin2hex() %>% hashids::encode_hex(hid)
[1] "MV8BokPp"
> y %>% BMS::bin2hex() %>% hashids::encode(hid) 
int%%1 でエラー:  二項演算子の引数が数値ではありません