⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tea.cpp

📁 Tiny Encrytion Algorithm压缩速度快
💻 CPP
字号:
// The TEA encryption algorithm was invented by 
// David Wheeler & Roger Needham at Cambridge 
// University Computer Lab
//   http://www.cl.cam.ac.uk/ftp/papers/djw-rmn/djw-rmn-tea.html (1994)
//   http://www.cl.cam.ac.uk/ftp/users/djw3/xtea.ps (1997)
//   http://www.cl.cam.ac.uk/ftp/users/djw3/xxtea.ps (1998)
//
// This code was originally written in JavaScript by 
// Chris Veness at Movable Type Ltd
//   http://www.movable-type.co.uk
//
// It was adapted to C++ by Andreas Jonsson 
//   http://www.angelcode.com

#include "tea.h"
#include <math.h>

int TeaEncrypt(UINT *v, UINT n, UINT *k)
{
	if( n < 2 ) return -1;

    // TEA routine as per Wheeler & Needham, Oct 1998

    UINT z = v[n-1], y = v[0], delta = 0x9E3779B9;
    UINT mx, e, q = UINT(floor(6 + 52.0f/n)), sum = 0;

    while( q-- > 0 ) // 6 + 52/n operations gives between 6 & 32 mixes on each word
	{  
        sum += delta;
        e = sum>>2 & 3;
        for( UINT p = 0; p < n-1; p++ ) 
		{
            y = v[p+1];
            mx = (z>>5 ^ y<<2) + (y>>3 ^ z<<4) ^ (sum^y) + (k[p&3 ^ e] ^ z);
            z = v[p] += mx;
        }
        y = v[0];
        mx = (z>>5 ^ y<<2) + (y>>3 ^ z<<4) ^ (sum^y) + (k[p&3 ^ e] ^ z);
        z = v[n-1] += mx;
    }

	return 0;
}

int TeaDecrypt(UINT *v, UINT n, UINT *k)
{
	if( n < 2 ) return -1;

    // TEA routine as per Wheeler & Needham, Oct 1998

    UINT z = v[n-1], y = v[0], delta = 0x9E3779B9;
    UINT mx, e, q = UINT(floor(6 + 52.0f/n)), sum = q*delta;

    while (sum != 0) 
	{
        e = sum>>2 & 3;
        for( UINT p = n-1; p > 0; p-- ) 
		{
            z = v[p-1];
            mx = (z>>5 ^ y<<2) + (y>>3 ^ z<<4) ^ (sum^y) + (k[p&3 ^ e] ^ z);
            y = v[p] -= mx;
        }
        z = v[n-1];
        mx = (z>>5 ^ y<<2) + (y>>3 ^ z<<4) ^ (sum^y) + (k[p&3 ^ e] ^ z);
        y = v[0] -= mx;
        sum -= delta;
    }

    return 0;
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -