请参阅
pseudo_encrypt函数,该函数基于
Feistel network技术实现排列.结合postgres序列,这可以保证结果的独特性,以及人眼的随机性.
例:
create sequence seq maxvalue 2147483647; create table tablename( id bigint default pseudo_encrypt(nextval('seq')::int),[other columns] );
这里的有效范围是0 … 2 ^ 32-1.如有必要,可以通过修改功能来调整.具有64位输出空间的变体可以在:pseudo_encrypt() function in plpgsql that takes bigint找到.
编辑:pseudo_encrypt只实现一个排列,它不接受用户提供的密钥.如果你喜欢自己的排列,根据密钥,你可以考虑skip32(基于Skipjack的32位分组密码,10字节宽密钥).
plpgsql函数(从Perl / C移植)可在以下位置获得:
https://wiki.postgresql.org/wiki/Skip32