利用0 1編碼對CP ABE中可比較屬性的判斷

2021-09-17 08:41:38 字數 1805 閱讀 3970

最近看了一篇文章,如何對cp-abe中的可比較屬性進行快速判斷,這裡是利用的0-1編碼,首先,先解釋什麼叫可比屬性:我們處理的物件是這樣的屬性,它不是乙個精確的值,而是乙個連續值的範圍,可以在abe系統中進行比較匹配,如「score > 75」,「age < 25」。像score和age這種就叫做可比屬性。

然後再解釋一下什麼叫0編碼和1編碼。

看起來這個定義很難理解,於是這裡舉乙個例子。

首先,0編碼和1編碼都是乙個集合,這裡舉例,設x為11,y為6。

先說x,x的1編碼就是從2進製串開始取,每取到'1'時,就把字串加入到x的1編碼集合中,如x的二進位制是1011,取到第乙個1,就是"1",取到第2個1,就是"101",取到第3個1,就是"1011",至此所有1編碼全部取完,所以x的1編碼集合就是.

那麼x的0編碼呢,就是從2進製串開始取,每取到最後1個「0」,就把這個「0」翻轉成「1」,然後字串加入到0編碼集合中。如x中,取到第1個0(也是最後1個0),就是「10」,然後將「0」翻轉成「1」,於是0編碼就為「11」,因為1011中只有1個0,所以0編碼集合為。

y與x一樣,這裡就不贅述。可以參考上面的table2.

那麼我們如何判斷x>y呢,可以由以下公式表達:

就是x的1編碼與y的1編碼集合中至少有乙個元素相同,如11的1編碼和6的0編碼都有共同元素1.所以可以知道11>6.

利用0編碼和1編碼使這種屬性適合cp-abe構造。我們的程式是這樣執行的:

現在用乙個例子來解釋一下這些內容,假設系統要求接入使用者屬性為date>5月1日,那麼系統中將有setc0這個集合,如:5月1日我們定為121(也就是一年中的第121天),二進位制為001111001,那麼setc0(date,121)這個集合為:

date||>x||1

date||>x||01

date||>x||0011111

date||>x||00111101

如果我要判斷date>5月1日,那麼我們就要用setc0集合進行判斷,如果資料消費者的屬性為date=7月7日,那麼用setu1集合可以表示為setu1(date,188),即一年中的188天,二進位制位為:010111101,setu1集合為:

date||>x||01

date||>x||0101

date||>x||01011

date||>x||010111

date||>x||0101111

date||>x||010111101

我們發現setc0中和setu1中有一項元素是一樣的,即date||>x||01.

故7月7日滿足訪問結構。

原文:cabe: a new comparable attribute-based encryption construction with 0-encoding and 1-encoding

從ord 中對Unicode編碼的理解

剛開始學習程式設計的時候,老對字串編碼的理解模模糊糊。也一直看這方便的資料,今天在看dive in python時,突然有了新的理解 不知道是否正確 python有個built in函式ord 返回乙個字元的unicode值。這個函式並沒有其他引數,那就是說,給定乙個字元,就會有乙個特定值對應。跟具...

python中利用GDAL對tif檔案進行讀寫

利用gdal庫對tif影像進行讀取 示例 預設波段為 b g r nir的順序,且為四個波段 import gdal defreadtif filename dataset gdal.open filename ifdataset none print filename 檔案無法開啟 return ...

對Python中字串編碼的理解

字串,作為python中基本資料型別中的一種,也是使用最頻繁的資料型別。這裡對字串的編碼格式做乙個總結。在python中字串有兩種形式 一種是bytes型別,一種是str型別。str bytes encode編碼 bytes str decode解碼 可以使用下圖這種理解方式 1.1引數 1.2示例...