2014-04-07 23 views

Odpowiedz

9

Zobacz funkcję pseudo_encrypt, która implementuje permutację opartą na technice Feistel network. W połączeniu z sekwencją postgresów gwarantuje to jednolitość wyniku, a także losowość ludzkiego oka.

Exemple:

create sequence seq maxvalue 2147483647; 

create table tablename(
id bigint default pseudo_encrypt(nextval('seq')::int), 
[other columns] 
); 

Efektywny zasięg id tutaj jest 0...2^32-1. W razie potrzeby można to zmienić, modyfikując funkcję. Wariant z 64-bitową przestrzenią wyjściową można znaleźć pod adresem: pseudo_encrypt() function in plpgsql that takes bigint.


EDIT: pseudo_encrypt realizuje tylko jeden permutacji i nie akceptuje klucza dostarczonego przez użytkownika. Jeśli wolisz mieć własne permutacje, w zależności od tajnych kluczy, możesz rozważyć skip32 (32-bitowy szyfr blokowy oparty na Skipjack, z kluczami o szerokości 10 bajtów).

plpgsql funkcji (przeniesione z Perl/C) są dostępne na stronie: https://wiki.postgresql.org/wiki/Skip32

Powiązane problemy