3个不稳定版本
0.2.1 | 2023年3月13日 |
---|---|
0.2.0 | 2023年3月13日 |
0.1.0 | 2023年3月13日 |
#1476 in 算法
9KB
106 行
Optimus (Rust)
使用这个库,您可以将内部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