阅读背景:

c语言版本 xxtea 加密算法实现

来源:互联网 
#define MX (z>>5^y<<2) + (y>>3^z<<4)^(sum^y) + (k[p&3^e]^z);

long btea(long* v, long n, long* k) {
    unsigned long z=v[n-1], y=v[0], sum=0, e, DELTA=0x9e3779b9;
    long p, q ;
    if (n > 1) {          /* Coding Part */
        q = 6 + 52/n;
        while (q-- > 0) {
            sum += DELTA;
            e = (sum >> 2) & 3;
            for (p=0; p<n-1; p++) y = v[p+1], z = v[p] += MX;
            y = v[0];
            z = v[n-1] += MX;
        }
        return 0 ;
    } else if (n < -1) {  /* Decoding Part */
        n = -n;
        q = 6 + 52/n;
        sum = q*DELTA ;
        while (sum != 0) {
            e = (sum >> 2) & 3;
            for (p=n-1; p>0; p--) z = v[p-1], y = v[p] -= MX;
            z = v[n-1];
            y = v[0] -= MX;
            sum -= DELTA;
        }
        return 0;
    }
    return 1;
}




int main(int argc, char * argv[]) {

    long key[100] = {1, 2, 3, 4, 5,6,7,8,9,10}; //加密key
    long data[100] = {1, 2, 3, 4, 5,6,7,8,9,10} ;  //待加密数据  {1, 2, 3, 4, 5,6,7,8,9,10}
    long n = sizeof(data)/sizeof(long)-1;
    printf( "原始数据:\n") ;
    for (int i = 0; i < 10; i++)
        printf("%d", (int)data[i]);
    
    btea(data, n, key);   // n为10,表示加密
    
    printf( "\n\n加密后数据:\n");
    for (int i = 0; i < 10; i++)
        printf("%d", (int)data[i]);
    
    btea(data, -n, key);   // n为-10,表示解密
    
    printf( "\n\n解密后数据:\n");
    for (int i = 0; i < 10; i++)
        printf("%d", (int)data[i]);
    
    return 0;
}

/*
 原始数据:
 12345678910
 
 加密后数据:
 64910272916161279251076504406-854940934-2878803461560881696-10597049801613814276622662341480333385
 
 解密后数据:
 12345678910
 */#define MX (z>>5^y<<2) + (y>>3^z<<4)^(sum^y) + 



你的当前访问异常,请进行认证后继续阅读剩余内容。

分享到: