上次在《InstallShield的加密解密》中说要研究一下XXTEA的加密方法,不过后来一直太忙,没有时间研究。最近在百忙中抽空将XXTEA的JavaScript实现的代码改写成InstallShield的脚本,但是运行结果好像不对,现贴出来,以求教大方:
参考文献:
《XXTEA 加密算法的 JavaScript 和 PHP 实现》 http://www.coolcode.cn/?p=128
//===========================================================================
//
// File Name: XXTEA.rul
//
//
//===========================================================================
1
prototype NUMBER str2long(STRING,BOOL) ;
2
prototype STRING long2str(VARIANT,BOOL);
3
prototype STRING xxtea_encrypt(STRING,STRING);
4
prototype STRING xxtea_decrypt(STRING,STRING);
5![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
6
function STRING long2str(v, w)
7
NUMBER vl,sl;
8
NUMBER i;
9
LIST listID;
10
STRING svStr,szStr;
11
begin
12
vl = SizeOf(v);
13
sl = v(vl - 1) & 0xffffffff;
14
listID=ListCreate(STRINGLIST);
15
for i = 0 to vl-1
16
svStr[0]=v(i) & 0xff;
17
svStr[1]=v(i) >> 8 & 0xff;
18
svStr[2]=v(i) >> 16 & 0xff;
19
svStr[3]=v(i) >> 24 & 0xff;
20
ListAddString (listID,svStr,AFTER);
21
endfor;
22
StrPutTokens( listID, szStr, "", FALSE );
23
if (w) then
24
StrSub (szStr,szStr,0,sl);
25
else
26
endif;
27
return szStr;
28
end;
29
function NUMBER str2long(s, w)
30
NUMBER vl,sl;
31
NUMBER i,len,v(),x,n;
32
begin
33
len = StrLength(s);
34
x=1;
35
Resize (v,x);
36
for i = 0 to len-1 step 4
37
v(i >> 2) = s[i]
38
| s[i + 1] << 8
39
| s[i + 2] << 16
40
| s[i + 3] << 24;
41
x=x+1;
42
Resize (v,x);
43
endfor;
44
if (w) then
45
n= SizeOf(v) ;
46
v(n-1) = len;
47
endif;
48
return v;
49
end;
50![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
51
function string xxtea_encrypt(str, key)
52
NUMBER v(),k(),temp;
53
NUMBER n,z,y,delta,mx,e,q,sum,p;
54
begin
55
if (str == "") then
56
return "";
57
endif;
58
v = str2long(str, TRUE);
59
k = str2long(key, FALSE);
60
n = SizeOf(v) - 1;
61
temp=SizeOf(k);
62
z = v(n);
63
y = v(0);
64
delta = 0x9E3779B9;
65
q = 6 + 52 / (n + 1)-1;
66
sum = 0;
67
while (q> 0)
68
sum = sum + delta & 0xffffffff;
69
e = sum >> 2 & 3;
70
for p = 0 to n-1
71
y = v(p + 1);
72
mx = (z >> 5 ^ y << 2) + (y >> 3 ^ z << 4) ^ (sum ^ y) + (k(p & 3 ^ e) ^ z);
73
z = v(p) = v(p) + mx & 0xffffffff;
74
endfor;
75
y = v(0);
76
mx = (z >> 5 ^ y << 2) + (y >> 3 ^ z << 4) ^ (sum ^ y) + (k(p & 3 ^ e) ^ z);
77
v(n) = v(n) + mx & 0xffffffff;
78
z = v(n) ;
79
q=q-1;
80
endwhile;
81![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
82
return long2str(v, FALSE);
83
end;
84![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
85
function string xxtea_decrypt(str, key)
86
NUMBER v(),k();
87
NUMBER n,z,y,delta,mx,e,q,sum,p;
88
begin
89
if (str == "") then
90
return "";
91
endif;
92
v = str2long(str, FALSE);
93
k = str2long(key, FALSE);
94
n = SizeOf(v) - 1;
95![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
96
z = v(n - 1);
97
y = v(0);
98
delta = 0x9E3779B9;
99
q = 6 + 52 / (n + 1);
100
sum = q * delta & 0xffffffff;
101
while (sum != 0)
102
e = sum >> 2 & 3;
103
for p = n downto 0 step 1
104
z = v(p - 1);
105
mx = (z >> 5 ^ y << 2) + (y >> 3 ^ z << 4) ^ (sum ^ y) + (k(p & 3 ^ e) ^ z);
106
y = v(p) = v(p) - mx & 0xffffffff;
107
endfor;
108
z = v(n);
109
mx = (z >> 5 ^ y << 2) + (y >> 3 ^ z << 4) ^ (sum ^ y) + (k(p & 3 ^ e) ^ z);
110
v(0) = v(0) - mx & 0xffffffff;
111
y =v(0) ;
112
sum = sum - delta & 0xffffffff;
113
endwhile;
114![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
115
return long2str(v, TRUE);
116
end;
117![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
//
// File Name: XXTEA.rul
//
//
//===========================================================================
1
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
2
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
3
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
4
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
5
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
6
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
7
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
8
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
9
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
10
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
11
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
12
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
13
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
14
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
15
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
16
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
17
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
18
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
19
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
20
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
21
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
22
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
23
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
24
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
25
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
26
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
27
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
28
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
29
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
30
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
31
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
32
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
33
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
34
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
35
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
36
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
37
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
38
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
39
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
40
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
41
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
42
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
43
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
44
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
45
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
46
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
47
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
48
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
49
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
50
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
51
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
52
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
53
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
54
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
55
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
56
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
57
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
58
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
59
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
60
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
61
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
62
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
63
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
64
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
65
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
66
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
67
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
68
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
69
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
70
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
71
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
72
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
73
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
74
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
75
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
76
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
77
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
78
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
79
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
80
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
81
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
82
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
83
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
84
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
85
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
86
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
87
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
88
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
89
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
90
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
91
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
92
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
93
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
94
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
95
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
96
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
97
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
98
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
99
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
100
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
101
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
102
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
103
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
104
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
105
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
106
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
107
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
108
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
109
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
110
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
111
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
112
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
113
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
114
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
115
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
116
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
117
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
参考文献:
《XXTEA 加密算法的 JavaScript 和 PHP 实现》 http://www.coolcode.cn/?p=128