位運算 linux許可權管理及應用

2021-10-10 05:30:09 字數 1511 閱讀 4504

linux基於位運算的許可權控制

linux許可權控制是基於位運算實現的。

在linux許可權系統中,讀、寫、執行許可權分別對應三個狀態位:讀寫

執行==>

二進位制==>

十進位制001

==>

001==>10

10==>

010==>21

00==>

100==>40

11==>

011==>31

01==>

101==>51

10==>

110==>61

11==>

111==>

7 如上所示

實現許可權的新增(或運算)

增加許可權使用或(|)運算實現。

如,為使用者增加「讀取」、「寫入」兩種許可權讀寫

執行》二進位制》

十進位制描述00

0>

000>

0已有許可權(沒有任何許可權)10

0>

100>

4待增加的許可權,讀01

0>

010>

2待增加的許可權,寫

使用者現有的許可權碼為0,為其增加「讀取」、「寫入」兩種許可權,即4,2 使用或運算結果如下

0|4=4 //增加讀取許可權

4|2=6 //增加寫入許可權

實現許可權的減少(非運算)

位運算同樣可以實現使用者許可權的減少,減少使用者許可權使用非(^)運算。如,將許可權碼為7使用者,移除執行許可權:讀寫

執行》二進位制》

十進位制描述11

1>

111>

7已有許可權10

0>

100>

4待判斷的許可權,讀

許可權碼7(111)和1(001)的非運算結果為6,即:7^1=6。許可權碼6,則為許可權碼7移除執行後的許可權碼。

實現許可權的判斷(與運算)

在需要進行使用者許可權判斷時,可以使用與(&)運算判斷使用者是否具有某項許可權。

如,判斷許可權碼為6使用者是否有「讀取」,「執行」許可權:讀寫

執行》二進位制》

十進位制描述11

0>

110>

6已有許可權10

0>

100>

4待判斷的許可權,讀00

1>

001>

1待判斷的許可權,執行

許可權碼6(110)和4(100)的與運算結果為4,即:6&4=4。許可權碼6(110)和1(001)的與運算結果為0,即:0=6&1。

根據與運算的計算規律,當運算結果為所要判斷許可權本身值時,我們可以認為使用者具有這個許可權。而當運算結果為 0 時,我們可以認為使用者不具有這個許可權。

優點和缺陷

位運算的運算物件是二進位制的位,速度快,效率高,而且節省儲存空間,位運算做許可權控制又相當地靈活。但是,位運算也有很大的侷限,因為在32位計算機上,位移不能超過32次,這就要求許可權數量不超過32種。而mysql資料庫的bigint,其儲存空間為8byte,使用bigint儲存儲存碼時,許可權數不能多於64個(8*8-1)。

位運算及應用

位運算 與 或 非 異或 左移,相當與 2 右移,正數高位補0,負數由計算機決定 右移,正數高位補0,負數亦補0 迴圈左移k次 x 32 k 迴圈右移k次 x k x 32 k 清零取反要用與,某位置一可用或 若要取反和交換,輕輕鬆鬆用異或 應用 字元改變大小寫 原理 小寫字元比對應的大寫字元在數值...

php位運算許可權管理

簡單許可權類 class peak auth 本類不允許物件複製的操作 public function clone 設定許可權的詳細資訊 param string authmessage public function setauthmessage authmessage 獲取權名稱 return ...

位運算及簡單應用

老實說,我對 一些比較簡單的運算子比較熟悉。對位運算就陌生了,主要用的少。我覺得高手用的會比較多,因為位運算速度比較快。1.如果兩個相應的二進位制位都為 則該位的結果值為1 否則為0。注 下面都用8位的 unsigned char 來做例子。11 3 3 00001011 00000011 0000...