跳转到主要内容

适用于任意大小整数的简单排列。

项目描述

Bitdeli Build Status Coverage Status Version Downloads

此包实现了一个简单、可配置的64位整数集合排列。

排列基于一个掩码,该掩码将输入的每个位映射到输出中的一个位。掩码通过使用PRNG从随机种子扩展,正如George Marsaglia在他的论文Xorshift RNGs中所描述。因此,排列被认为是不可预测的,前提是种子保持秘密。

用法

通过传递可选的种子创建一个新的Permutation实例。

>>> fromo intperm import Permutation
>>> perm = Permutation(42)
>>> perm.map_to(37)
13750393542137160527L
>>> perm.map_from(13750393542137160527)
37

不提供种子将创建一个随机排列

>>> perm = Permutation()
>>> perm.map_from(perm.map_to(37)) == 37
True

用例

用例可能不同,但我发现的一个有用的例子是根据数据库中存储的ID生成难以猜测的、看起来随机的令牌。ID可以与种子一起使用来解码原始ID,但它们的基数与ID本身相同。如果使用得当,这可以节省您在数据库中对这些令牌进行索引的需要。

另一个很好的例子是将通过某种API提供的私有对象的ID随机化。假设您的网站上的用户账户可以通过路径/user/:id访问,其中:id是用户的ID。有人可以通过枚举URL并跟踪状态代码(例如,403与404)来跟踪您的用户基础的增长。

使用这种简单的排列,可以保持用户ID不可预测,从而使这类攻击实际上变得毫无用处。

另请参阅

此库还实现了RubyGo

项目详情


下载文件

下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源代码分发

intperm-1.1.1.tar.gz (4.7 kB 查看哈希)

上传时间 源代码

由以下支持

AWSAWS 云计算和安全赞助商 DatadogDatadog 监控 FastlyFastly CDN GoogleGoogle 下载分析 MicrosoftMicrosoft PSF赞助商 PingdomPingdom 监控 SentrySentry 错误日志 StatusPageStatusPage 状态页面