生成加密标识符
idgen的Python项目详细描述
简介
idgen允许您生成以下唯一标识符:
- match a desired format;
- look random (if you activate crypto);
- can be converted back to ints, given the password; and
- use ALL possible values in the forma
假设您想要生成如下ID:
vis90000 suu54581 qcr00006 pcg75148 yuy22283 low69877
通过Encoder('aaaddddd',password='jupiterx')输入数字0-5。
您可以反转此过程,将这些ID转换回0-5。
问题
q:为什么不使用递增整数作为标识符?
a:您可能希望向外部人员隐藏对象的速度 正在创建。您可能需要使用较少的特定格式 角色比Base10好,但对人类友好。
q:为什么不随机生成标识符?
a:如果要避免两次发出相同的id,您需要查看 在数据库或映射中更新每个新ID。作为已颁发的ID数 增长,每个新ID的查找数增长。如果你只是计划 要使用可用键空间的一小部分,这是可以接受的, 但与只加密一个int相比是不雅的。
q:为什么不用aes或其他东西加密一个整数呢?
a:因为分组密码的输出是固定大小的,即 不太可能符合您所需的格式。
例如,数字和大写字母的格式有10**A*26**B值。
aes的128位输出需要39位十进制数字进行编码。
如果截断分组密码的输出,则ID不再是 独特的或可逆的。
安装
签出源并运行python setup.py install。
使用idgen
from idgen import Encoder enc = Encoder('adad', password='Jupiterx') id = enc.encode(13) # f6d9 i = enc.decode(id) # 13
这将创建一个编码器,该编码器对窗体的字符串进行编码/解码。 字母数字字母数字。有26*10*26*10这样的字符串, 所以编码器可以处理从0到n-1的整数。
使用不同的字符集
enc = Encoder('wpwpw', types={'w': 'VWXYZ', 'p': '!@#$%^&*()'}, password='Jupitery') for i in range(5): print enc.encode(i)
产生:
X$X&X Y%W(W V!W$V Z)V@Y V)X)X
无加密编码
如果你只想在整数和一些字母数字之间转换 表示:
enc = Encoder('aaa') for i in range(200, 205): print enc.encode(i)
产生:
ahs aht ahu ahv ahw
插入常量字符(标点符号)
enc = Encoder('ad/ddd-a.d', password='Jupiterz') for i in range(5): print enc.encode(i)
产生:
j7/739-l.5 x2/319-z.2 w9/274-i.8 z5/166-m.9 v3/500-p.3
idgen将标点字符视为常量,因为它们 不是types映射中的键。