国产探花免费观看_亚洲丰满少妇自慰呻吟_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);

}


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 临沧市| 邢台县| 石河子市| 奉贤区| 密山市| 荃湾区| 株洲县| 兰考县| 台东市| 常德市| 贵州省| 长乐市| 佛冈县| 若尔盖县| 竹北市| 紫阳县| 南郑县| 和硕县| 淮阳县| 安图县| 石河子市| 荥经县| 仙游县| 大名县| 中牟县| 万山特区| 芷江| 伽师县| 敦煌市| 绥中县| 类乌齐县| 如皋市| 耿马| 祁阳县| 中西区| 三台县| 米林县| 紫阳县| 河东区| 钟祥市| 钟祥市|