3个不稳定版本

0.2.1 2023年3月13日
0.2.0 2023年3月13日
0.1.0 2023年3月13日

#1476 in 算法

MIT/Apache

9KB
106

Optimus (Rust)

Crates.io Docs.rs

使用这个库,您可以将内部ID转换为基于Knuth整数散列的混淆整数。它类似于Hashids,但将生成整数而不是随机字符串。

使用方法

开始之前,您需要以下三个东西;

  • 小于 2147483647 的大质数
  • 质数的逆,使得 (PRIME * INVERSE) & MAXID == 1
  • 小于 2147483647 的大随机整数
use optimus::Optimus;
pub fn main() {
    let prime = 1580030173; //choose this, but make sure its prime
    let mod_inverse = 59260789; //calculate from prime or use Optimus::new_calculated
    let random = 1163945558; //choose this at random
    let opt = Optimus::new(prime, mod_inverse, random).unwrap();
    //or
    // let opt = Optimus::new_calculated(prime, random).unwrap();
    // to calculate mod_inverse
    let id = 15; //ID we want to obfuscate
    let encoded_id = opt.encode(id); //obfuscated id=1103647397
    assert_eq!(encoded_id, 1103647397);
    let decoded_id = opt.decode(encoded_id); //back to 15
    assert_eq!(id, decoded_id, "Id and decoded ID should be the same")
}

灵感来源

本包基于 pjebs 的Go库。

该库又基于 jenssegers 的PHP库。

依赖项

~0.4–1MB
~21K SLoC