先寫最重要的觀念,任何的客戶個資,在透過網路傳輸時,或是紀錄在資料庫或雲端,或是程式執行時寫下的log,至少要做加鹽(salt)處理,去識別化,否則輕則罰錢,重則背上刑事責任
互斥或(XOR,Exclusive OR)操作口訣,奇數個1為1,偶數個1為0
p | q | p XOR q |
1 (true) | 1 (true) | 0 (false) |
1 (true) | 0 (false) | 1 (true) |
0 (false) | 1 (true) | 1 (true) |
0 (false) | 0 (false) | 0 (false) |
(p XOR q) XOR q = p
加密後的資料 XOR 密碼 = 原始資料
C#程式碼:
public class DataSalt
{
public static byte ExclusiveOR(byte value, params byte[] keys)
{
foreach (byte key in keys)
{
value ^= key;
}
return value;
}
public static int ExclusiveOR(int value, params int[] keys)
{
foreach (int key in keys)
{
value ^= key;
}
return value;
}
}
單元測試:
DataSalt.ExclusiveOR(1, 0)
1
DataSalt.ExclusiveOR(1, 255)
254
Convert.ToString(DataSalt.ExclusiveOR(1, 255), 2).PadLeft(8, '0')
"11111110"
DataSalt.ExclusiveOR(254, 255)
1
DataSalt.ExclusiveOR(DataSalt.ExclusiveOR(1, 255), 255)
1
DataSalt.ExclusiveOR(1, 255, 127)
129
DataSalt.ExclusiveOR(DataSalt.ExclusiveOR(1, 255, 127), 255)
126
DataSalt.ExclusiveOR(DataSalt.ExclusiveOR(1, 255, 127), 127)
254
DataSalt.ExclusiveOR(DataSalt.ExclusiveOR(1, 255, 127), 255, 127)
1
DataSalt.ExclusiveOR(DataSalt.ExclusiveOR(1, 255, 127), 127, 255)
1
單元測試正常
延伸應用:多權限控管
舉例:
需要總經理核準才能看的資料 = 原始資料 XOR 總經理的密鑰(譬如測試範例255)
需要總經理和董事長核準才能看的資料 = 原始資料 XOR 總經理的密鑰 XOR 董事長的密鑰(譬如測試範例127)
互斥或(XOR)搭配移位運算(>> / <<)、邏輯運算(AND / OR)、位元補充(~)等操作,應用面無窮無盡,之後再補上其他實務範例