TEA XTEA XXTEA 學習筆記

2022-09-12 01:27:21 字數 3206 閱讀 9602

目錄[2.0]xtea加密演算法

[3.0]xxtea加密演算法

在密碼學中,微型加密演算法(tiny encryption algorithm,tea)是一種易於描述和執行的塊密碼,通常只需要很少的**就可實現。 其設計者是劍橋大學計算機實驗室的大衛·惠勒與羅傑·尼達姆。

可以看出:是把輸入分成兩組,分別是v[0],v[1],綠色方格為做加法,紅色圓圈為做異或,可以看出,用金鑰k[0],k[1]加密後,把兩個數做一次置換,再加密一次,這樣經過多輪加密以後就可以通過簡單的演算法把兩個數變得很複雜,滿足加密演算法混亂和擴散的特性。

#include #include //加密函式  

void encrypt (uint32_t* v, uint32_t* k) //加密函式主體

v[0]=v0; v[1]=v1;//置換

}//解密函式

void decrypt (uint32_t* v, uint32_t* k) //解密函式主體 ,倒過來寫即可

v[0]=v0; v[1]=v1;//置換

}

int main()

,k[4]=;

// v為要加密的資料是兩個32位無符號整數

// k為加密解密金鑰,為4個32位無符號整數,即金鑰長度為128位

printf("加密前原始資料:%u %u\n",v[0],v[1]);

encrypt(v, k);

printf("加密後的資料:%u %u\n",v[0],v[1]);

decrypt(v, k);

printf("解密後的資料:%u %u\n",v[0],v[1]);

return 0;

}

xtea是tea的公升級版,增加了更多的金鑰表,移位和異或操作等等。其設計者是roger needham, d**id wheeler。

也是分成兩組,但是把金鑰和sum值關聯起來,使得對v[0]和v[1]加密的時候每一輪所用的金鑰也不一樣,增強了加密演算法的安全性。其中sum[i-1]為本輪加密未加delta時的sum值,sum[i]為加上delta的sum值。

#include #include void encipher(unsigned int num_rounds, uint32_t v[2], uint32_t const key[4])   

v[0]=v0; v[1]=v1;

}

void decipher(unsigned int num_rounds, uint32_t v[2], uint32_t const key[4])

v[0]=v0; v[1]=v1;

}

int main()

; uint32_t const k[4]=;

unsigned int r=32;//num_rounds建議取值為32

// v為要加密的資料是兩個32位無符號整數

// k為加密解密金鑰,為4個32位無符號整數,即金鑰長度為128位

printf("加密前原始資料:%u %u\n",v[0],v[1]);

encipher(r, v, k);

printf("加密後的資料:%u %u\n",v[0],v[1]);

decipher(r, v, k);

printf("解密後的資料:%u %u\n",v[0],v[1]);

return 0;

}

xxtea,又稱corrected block tea,是xtea的公升級版。其設計者是roger needham, d**id wheeler。

下面重點解讀**邏輯(updated on 1.13)

#include #include #define delta 0x9e3779b9

#define mx (((z>>5^y<<2) + (y>>3^z<<4)) ^ ((sum^y) + (key[(p&3)^e] ^ z)))

//乙個混淆操作,根據密碼學的擴散原理,讓演算法更安全,同時也是xxtea的特徵之一

void xxtea(uint32_t *v, int n, uint32_t const key[4])

z = v[n-1];

y = v[0] -= mx;

sum -= delta;

}while (--rounds);

}} int main()

; uint32_t const k[4]= ;

int n= 2; //n的絕對值表示v的長度,取正表示加密,取負表示解密

// v為要加密的資料是兩個32位無符號整數

// k為加密解密金鑰,為4個32位無符號整數,即金鑰長度為128位

printf("%#10x %#10x\n",v[0],v[1]);

xxtea(v, n, k);//n>0為加密

printf("%#10x %#10x\n",v[0],v[1]);

xxtea(v, -n, k);//n<0為解密

printf("%#10x %#10x\n",v[0],v[1]);

return 0;

}

通過pip install xxtea-py安裝後可以呼叫

import xxtea

text = "hello world!"

key = "1234567890"

encrypt_data = xxtea.encrypt(text, key)

decrypt_data = xxtea.decrypt_utf8(encrypt_data, key)

print(text == decrypt_data);

C Primer Chapter One學習筆記

筆記 1.流 從io裝置上讀入或寫出的字串行,用來說明字元隨時間順序生成或消耗。2.輸入輸出符可連用原因 operator 或operator 返回stream物件。3.要測試程式那個語句出錯,使用cout 4.新建乙個內建型別,如int i 0 最好先初始化,不然用到的時候沒初始化會產生奇怪的錯誤...

BroadcastReceiver學習筆記

需要注意 的是,不要在 onreceive 方法中新增過多的邏輯或者進行任何的耗時操作,因為在廣播接收 器中是不允許開啟執行緒的,當 onreceive 方法執行了較長時間而沒有結束時,程式就會報錯。有序broadcast,sendorderedbroadcast intent,null abort...

CDISC SDTM SE domain 學習筆記

整理翻譯自 sdtm ig 3.2 www.cdisc.org sdtm se subject elements 鞏固每個subject的epochs和elements的起止時間點.se對於有多個 時期的試驗有著重要的用處 如crossover試驗 se包含乙個subject從乙個element進入...