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

参考文献:
《XXTEA 加密算法的 JavaScript 和 PHP 实现》  http://www.coolcode.cn/?p=128

相关文章: