2014-04-07 19 views

Trả lời

9

Xem hàm pseudo_encrypt, thực hiện hoán vị dựa trên kỹ thuật Feistel network. Kết hợp với một chuỗi postgres, điều này đảm bảo tính độc đáo của kết quả, cũng như sự ngẫu nhiên đối với mắt người.

dụ:

create sequence seq maxvalue 2147483647; 

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

Phạm vi hiệu quả của id đây là 0...2^32-1. Điều này có thể được điều chỉnh nếu cần thiết bằng cách sửa đổi chức năng. Một biến thể với không gian đầu ra 64 bit có thể được tìm thấy tại: pseudo_encrypt() function in plpgsql that takes bigint.


CHỈNH SỬA: pseudo_encrypt chỉ thực hiện một hoán vị và không chấp nhận khóa do người dùng cung cấp. Nếu bạn muốn có hoán vị của riêng mình, tùy thuộc vào khóa bí mật, bạn có thể xem xét skip32 (một mật mã khối 32 bit dựa trên Skipjack, với các phím rộng 10 byte).

Chức năng plpgsql (được chuyển từ Perl/C) có sẵn tại: https://wiki.postgresql.org/wiki/Skip32

Các vấn đề liên quan