2014-04-07 19 views

cevap

9

Feistel network tekniğine dayalı bir permütasyon uygulayan pseudo_encrypt işlevine bakın. Bir postgres sekansı ile birleştirildiğinde, bu sonuç, insan gözüne rastlantıların yanı sıra, sonuçların birliğini de garanti eder.

Exemple:

create sequence seq maxvalue 2147483647; 

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

id etkili menzili burada 0...2^32-1 olduğunu. Bu, işlevi değiştirerek gerekirse ayarlanabilir. 64 bit çıkış alanı olan bir varyant şu adreste bulunabilir: pseudo_encrypt() function in plpgsql that takes bigint.


DÜZENLEME: pseudo_encrypt tek permütasyon uygular ve bir kullanıcı tarafından sağlanan anahtar kabul etmez. Kendi anahtar kelimelerinizi tercih ediyorsanız, gizli anahtarlara bağlı olarak, skip32 (10 byte geniş tuşa sahip Skipjack tabanlı bir 32 bit blok şifreleyici) düşünebilirsiniz. https://wiki.postgresql.org/wiki/Skip32

: (Perl/C den port)

bir plpgsql fonksiyonu mevcuttur

İlgili konular