任意大小整数的简单置换。

intperm的Python项目详细描述


BitdeliBuild StatusCoverage StatusVersionDownloads

这个包在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可以保持不可预测,呈现 这种攻击几乎毫无用处。

另请参见

这个库也在RubyGo中实现。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何优化orientdb查询   Android/java解析带有编号数据的JSON   javascript IE 11找不到运行小程序的Java插件   aar中未包含java类   java在JCEF浏览器中获取网页截图   string Java:在不使用循环的情况下将输入与列表中的所有内容进行比较?   regex如何使用(正则表达式)删除java中的重复字母,并且不区分大小写   数组如何在java中获取timeRangeEndDate和timeRangeStartDate?   java jBPM 6.1 Hello World   java有些对象无法通过Gson反序列化   java iText 7将PDF层(OCG)与基本PDF合并   java程序在使用log4j和springframework上课前立即暂停   java使用SSO处理用户身份验证   在java中从字符串中提取日期   Java WebDAV客户端作为Windows中的虚拟驱动器