IDEA加密演算法 c實現

2021-09-18 01:39:21 字數 2511 閱讀 6244

vs2013環境下面成功編譯並且執行

idea演算法,全稱是internationale data encrypt algorithm 一種國際資料加密演算法 至今為止都很安全,是一種塊加密演算法。

金鑰長度為128bit(16位元組),以每64bit(8位元組)為單位進行加密。

演算法主要流程:

1.首先進行金鑰拓展,加密乙個塊需要52個金鑰(48 + 4)

1.1採用每次迴圈左移25位的方式,每次生成16bit的金鑰8個,迴圈6次

1.2最後的時候再迴圈一次,取前四個16bit作為最後4個金鑰

2.對明文進行加密

2.1將64bit明文拆分成4個16bit形式,進行異或,模加法,模乘法,輸出到 緩衝區中

2.2最後一次的時候與最後四個金鑰進行模加法和模乘法運算

#include

#include

#include

#define idea_add_modular 65536

#define idea_mp_modular 65537

unsigned

char key=

"1234567812345678"

;//金鑰

unsigned

char plaintext=

"1234567812345678"

;//明文

unsigned

short subkey[52]

;inline

unsigned

short

add_mod

(unsigned

short a,

unsigned

short b)

//模65536的加法

inline

unsigned

short

multi_mod

(unsigned

short a,

unsigned

short b)

//模65537乘

void

rolleft

(unsigned

short tmpkey)

//迴圈左移

tmpkey[7]

=(tmpkey[7]

<<5)

| highpart;

}//產生52個16位子金鑰 所有的子金鑰都是由這128位key而來的 首先128 = 16 * 8 初始有8個子金鑰

void

extendkey()

//擴充套件key

//前48個

for(i =

1; i <=

5; i++)}

//最後四個

for(

int k =

0; k <

5; k++

)//每次移動五位 移動五次

rolleft

(tmpkey)

;for

(i =

0; i <

4; i++)}

//對於密文

//以8個位元組為一組進行加密 首先被分成4個16位為x1,x2,x3,x4 每一輪需要6個金鑰 共計8輪 最後的4個子金鑰用於變換輸出

void

idearound

(unsigned

short x,

int round)

}void

ideaencrypt()

len =

strlen((

const

char

*)plaintext)/8

;//加密組數

printf

("cipher result : ");

for(

int count =

0; count < len; count++

)for

(int j =

0; j <

8; j++

)//最後一輪不進行變換 故再交換一次

temp = x[1]

; x[1]

= x[2]

; x[2]

= temp;

//第九輪變換 需要用到最後的4個子金鑰了

x[0]

=multi_mod

(x[0

], subkey[48]

);x[1]

=add_mod

(x[1

], subkey[49]

);x[2]

=add_mod

(x[2

], subkey[50]

);x[3]

=multi_mod

(x[3

], subkey[51]

);for(i =

0; i <

4; i++

) data +=8

;//移動到下個塊}}

intmain()

c語言實現idea加密演算法

idea 資料加密演算法及實現 idea 對稱資料加密演算法,是我寫的第乙個關於加解密方面的演算法,在大學宿舍里弄了差不多將近二十個小時終於搞懂了。剛開始受到了 不良 資料的誤導走了很長時間的彎路,後來在圖書館看到了正確的介紹才終於把這個演算法給弄出來了。1 簡介idea,即國際資料加密演算法 是旅...

C 實現DES加密 演算法

我的第一篇部落格就是 c語言實現des加密 今天重寫的時候發現好像 傳錯了,有些尷尬,其中有各種奇怪的問題 問題1.好多表,包括s盒之類的寫成char型別了,應該寫int型別才對 問題2.好多變數沒宣告就用了 問題3.為啥我當時要寫這麼多static?問題4.沒標頭檔案,全擠在cpp裡面了 更新修復...

柵欄加密演算法 C 實現

柵欄的原理也很簡單 大概步驟 1.將明文去空格處理 2.將得到的串每key個字元分割成key列矩陣 3.按列遞增開始讀取得到的串 4.插入空格 舉例說明 假設key為3,明文為 ab cd ef1.去空格 abcdef2.分割 123 1abc 2def 3.按列讀取 adbecf4.插入空格 ad...