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...