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