国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

實現基于IDEA算法的加密工具(4)

2019-11-17 04:38:59
字體:
來源:轉載
供稿:網友

3.3.密文解密

  介紹IDEA加密算法的資料本就不多而且對于解密過程往往一筆帶過,筆者在編程實現IDEA算法時為此大傷腦筋,好在這塊骨頭總算被啃下了.下文筆者將結合實現代碼介紹一下解密過程,假如讀者想親自動手實現IDEA算法,筆者的”痛苦經驗”是可以讓你少走些彎路的.

解密操作和加密的步驟基本相同,但是在求密鑰時有所區別.

首先從用戶輸入的128位密鑰擴展出52個子密鑰,存放在ULONG16 Key[52]數組中,然后對這個52個子密鑰進行換位操作,

新位置:
0
1
2
3
4
5
6
7
8
9
10
11
12
13

原位置:
48
49
50
51
46
47
42
44
43
45
40
41
36
38

新位置:
14
15
16
17
18
19
20
21
22
23
24
25
26
27

原位置:
37
39
34
35
30
32
31
33
28
29
24
26
25
27

新位置:
28
29
30
31
32
33
34
35
36
37
38
39
40
41

原位置:
22
23
18
20
19
21
16
17
12
14
13
15
10
11

新位置:
42
43
44
45
46
47
48
49
50
51
       
原位置:
6
8
7
9
4
5
0
1
2
3
       

表中的原位置行的值代表該子密鑰在原密鑰數組中的位置,比如新密鑰數組中的第0號子密鑰為原來子密鑰組中的第48號子密鑰,對子密鑰數組換位后,就需要對某些子密鑰進行模216+1的乘法逆或模216加法逆的替換,詳情見下表(位置是針對換位后的子密鑰組)請看 下一頁
進行加法逆替換的子密鑰的位置:

1
2
7
8
13
14
19
20
25

26
31
32
37
38
43
44
49
50


進行乘法逆替換的子密鑰的位置:

0
3
6
9
12
15
18
21
24

27
30
33
36
39
42
45
48
51


需要變化的子密鑰總共18+18 = 36個,另外的52 – 36 = 16個子密鑰不變化.
下面介紹有關x逆元的計算方法.

X模216加法逆比較簡單: x -1 = 65536 – x ;

X模216+1乘法法逆和X的關系如下:

(X*X-1 ) %65537 = 1

求解X-1需要一定的計算量,具體的算法實現代碼如下:

#define LOW16(x) ((x)&0xffff)


ULONG16 mulInv( ULONG16 x)

{

ULONG16 t0,t1;

ULONG16 q,y;

if ( x<=1)

{

return x;

}

t1 = 0x10001L/x;

y = 0x10001L%x;

if(y == 1)

{

return LOW16(1-t1);

}

t0 = 1 ;

do

{

q = x/y;

x %= y;

t0 += q*t1;

if( x == 1)

{

return t0;

}

q = y/x;

y %=x;

t1 += q*t0;

}while( y != 1);

return LOW16(1-t1);

}


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 通山县| 辽中县| 客服| 揭东县| 德安县| 宁城县| 霍州市| 文水县| 高密市| 伊川县| 虞城县| 汨罗市| 怀柔区| 临潭县| 五家渠市| 苏尼特右旗| 铜鼓县| 汉寿县| 隆德县| 京山县| 巴彦县| 剑河县| 德安县| 那曲县| 杭州市| 贵溪市| 开鲁县| 台南县| 台湾省| 东莞市| 河南省| 金山区| 扎兰屯市| 洛川县| 龙海市| 蒲城县| 方正县| 敖汉旗| 平顺县| 敖汉旗| 边坝县|