Skip to main content

FEISTEL_OBFUSCATE

Deterministically obfuscate integers (e.g. IDs or phone numbers) while preserving bit length and value cardinality so joins still work.

Syntax​

FEISTEL_OBFUSCATE( <number>, <seed> )

Arguments​

ArgumentsDescription
numberInput
seedThe data for corresponding non-text columns for different tables will be transformed in the same way, so the data for different tables can be JOINed after obfuscation

Return Type​

Same as input

Examples​

SELECT feistel_obfuscate(10000,1561819567875);
+------------------------------------------+
| feistel_obfuscate(10000, 1561819567875) |
+------------------------------------------+
| 15669 |
+------------------------------------------+

feistel_obfuscate preserves the number of bits in the original input. If mapping to a larger range is required, an offset can be added to the original input, e.g. feistel_obfuscate(n+10000,50)

SELECT feistel_obfuscate(10,1561819567875);
+------------------------------------------+
| feistel_obfuscate(10, 1561819567875) |
+------------------------------------------+
| 13 |
+------------------------------------------+

Phone-number style example (seed = 4242):

SELECT 13000000000 + number AS phone,
feistel_obfuscate(13000000000 + number, 4242) AS masked_phone
FROM numbers(5);

-- Sample output
+-------------+--------------+
| phone | masked_phone |
+-------------+--------------+
| 13000000000 | 12221668677 |
| 13000000001 | 10245458699 |
| 13000000002 | 15398657780 |
| 13000000003 | 9910824758 |
| 13000000004 | 13299971128 |
+-------------+--------------+
Try Databend Cloud for FREE

Multimodal, object-storage-native warehouse for BI, vectors, search, and geo.

Snowflake-compatible SQL with automatic scaling.

Sign up and get $200 in credits.

Try it today