任意大小整数的简单置换。
intperm的Python项目详细描述
这个包在64位的集合上实现了一个简单的、可配置的排列。 整数。
置换基于一个位掩码,该位掩码将输入的每个位映射到一个位 输出的。位掩码使用PRNG从随机种子扩展为 由george marsaglia在其名为Xorshift RNGs的论文中描述。这个 因此,排列被认为是不可预测的,只要 种子是保密的。
用法
通过传入可选种子创建新的Permutation实例。
>>>fromointpermimportPermutation>>>perm=Permutation(42)>>>perm.map_to(37)13750393542137160527L>>>perm.map_from(13750393542137160527)37
不提供种子将创建随机排列:
>>>perm=Permutation()>>>perm.map_from(perm.map_to(37))==37True
用例
用例可能有所不同,但我发现一个有用的示例是 hard-根据数据库中存储的id来猜测随机查找的令牌。 id可以与seed一起用于解码原始id,但是 cardinality与id本身相同。如果使用得当, 这可以避免在数据库中索引这些令牌。
另一个很好的例子是随机化可用的私有对象的id 通过某种API。假设你网站上的用户帐户是 可通过路径/user/:id访问,其中:id是用户的ID。 可以通过枚举url和 跟踪状态代码(例如403与404)。
使用这个简单的排列,用户id可以保持不可预测,呈现 这种攻击几乎毫无用处。