前往
大廳
主題

互斥或(Exclusive OR)操作與資料加鹽(salt)

Yang | 2022-12-11 10:12:48 | 巴幣 0 | 人氣 230

先寫最重要的觀念,任何的客戶個資,在透過網路傳輸時,或是紀錄在資料庫或雲端,或是程式執行時寫下的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)、位元補充(~)等操作,應用面無窮無盡,之後再補上其他實務範例
送禮物贊助創作者 !
0
留言

創作回應

更多創作