生成加密标识符

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映射中的键。

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

推荐PyPI第三方库


热门话题
Java中ArrayList的超简单问题   Java 8在一段时间后过期   java如何创建具有用户定义维度的矩阵,并使用从上到下、从左到右的递增值填充它?   java从JDBC重启mysql   带有sqlite的java LiveData未更新UI   带有JDialog的java小程序在Mac OSX中未正确隐藏   java ActionListener无法从公共类引用数组?   java Apache Digester:NoSuchMethodException:没有这样的可访问方法   安卓中数据库中的java数据没有以正确的格式检索   java快速排序实现:使用random pivot时几乎排序   安卓 Java:高效的ArrayList过滤?   java如何在单独的文件中制作GUI程序   jasper报告如何从JSP或Java代码在JasperReport中传递参数值?