📄 zteancryptor.cpp
字号:
/* ZTeanCryptor.cpp
实现扩展的Tea加密算法类 CZTeanCryptor
张忠杰 2003-12-04
*/
#include "stdafx.h"
#include "ZTeanCryptor.h"
//定义常数
#define TEA_ROUND 32
#define TEA_DELTA 0x9E3779B9
//---------------------------------------------------------------------------
CZTeanCryptor::CZTeanCryptor(const void *Key)
{
SetKey(Key);
}
CZTeanCryptor::~CZTeanCryptor()
{
}
/* 设置密钥(密钥的长度128Bit)
Key 密钥 16字节(128比特)
*/
void CZTeanCryptor::SetKey(const void *Key)
{
if (Key!=NULL) {
memcpy(_Key,Key,16);
}else{
//memcpy(_Key,Key,16);
}
}
//读取密钥(密钥的长度128Bit)
void CZTeanCryptor::GetKey(void *Key)
{
memcpy(Key,_Key,16);
}
/* 使用扩展的Tea算法加密
Src 明文 8字节
Dst 密文 8字节
*/
void CZTeanCryptor::Encrypt(void *Dst,const void *Src)
{
int i;
unsigned __int32 Sum;
unsigned __int32 x,y;
unsigned __int32 *pKey=(unsigned __int32 *)_Key;
unsigned __int32 *pSrc=(unsigned __int32 *)Src;
unsigned __int32 *pDst=(unsigned __int32 *)Dst;
x=pSrc[0]; y=pSrc[1];
Sum=0;
for (i=0;i<TEA_ROUND;i++) {
x += ( ( y << 4 ) ^ (y >> 5 ) ) + ( y ^ Sum ) + pKey[ Sum & 3 ];
Sum += TEA_DELTA;
y += ( ( x << 4 ) ^ (x >> 5 ) ) + ( x ^ Sum ) + pKey[ ( Sum >> 11 ) & 3 ];
}
pDst[0]=x; pDst[1]=y;
}
/* 使用扩展的Tea算法解密
Src 密文 8字节
Dst 明文 8字节
*/
void CZTeanCryptor::Decrypt(void *Dst,const void *Src)
{
int i;
unsigned __int32 Sum;
unsigned __int32 x,y;
unsigned __int32 *pKey=(unsigned __int32 *)_Key;
unsigned __int32 *pSrc=(unsigned __int32 *)Src;
unsigned __int32 *pDst=(unsigned __int32 *)Dst;
x=pSrc[0]; y=pSrc[1];
Sum = TEA_DELTA * TEA_ROUND ;
for (i=0;i<TEA_ROUND;i++) {
y -= ( ( x << 4 ) ^ ( x >> 5 ) ) + ( x ^ Sum ) + pKey[ ( Sum >> 11 ) & 3 ];
Sum -= TEA_DELTA;
x -= ( ( y << 4 ) ^ ( y >> 5 ) ) + ( y ^ Sum ) + pKey[ Sum & 3 ];
}
pDst[0]=x; pDst[1]=y;
}
//---------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -