📄 zcryptor.cpp
字号:
/* ZCryptor.cpp
实现“保密密钥加密算法”的抽象类 CZCryptor
张忠杰 2003-12-04
*/
#include "stdafx.h"
#include "ZCryptor.h"
//---------------------------------------------------------------------------
//CZCryptor 类的成员函数
//长报文加密
void CZCryptor::LongEncrypt(void *Dst,const void *Src,int Len)
{
int i,k;
unsigned __int32 *pSrc = (unsigned __int32 *)Src ;
unsigned __int32 *pDst = (unsigned __int32 *)Dst ;
unsigned __int32 D0[2],D1[2],D2[2];
k = Len / 8 ;
D0[0] = 0;
D0[1] = 0;
for ( i=0 ; i < k ; i++ ) {
D1[0] = *pSrc++ ^ D0[0] ;
D1[1] = *pSrc++ ^ D0[1] ;
Encrypt(D2,D1);
*pDst++ = D0[0] = D2[0] ;
*pDst++ = D0[1] = D2[1] ;
}
}
//长报文解密
void CZCryptor::LongDecrypt(void *Dst,const void *Src,int Len)
{
int i,k;
unsigned __int32 *pSrc = (unsigned __int32 *)Src ;
unsigned __int32 *pDst = (unsigned __int32 *)Dst ;
unsigned __int32 D[2],D0[2],D1[2],D2[2];
k = Len / 8 ;
D0[0] = 0;
D0[1] = 0;
for ( i=0 ; i < k ; i++ ) {
D1[0] = D[0] = *pSrc++ ;
D1[1] = D[1] = *pSrc++ ;
Decrypt(D2,D1);
*pDst++ = D0[0] ^ D2[0] ;
*pDst++ = D0[1] ^ D2[1] ;
D0[0] = D[0] ;
D0[1] = D[1] ;
}
}
//长报文Hash
void CZCryptor::Hash(const void *Data,int Len,void *Result)
{
int i,k;
unsigned char Key[16];
unsigned char b[4096],b1[16],b2[16];
memset( Result , 0 , 16 );
memset( b , 0 , 4096);
memset( b1, 0 , 16);
memset( b2, 0 , 16);
if ((Len<8)||(Len>4096)) return;
memcpy( b , Data , Len );
k = Len & ~0xF ;
if ( Len & 0xF ) k += 0x10 ;
//保存密钥
GetKey(Key);
Encrypt(b1 ,b );
Encrypt(b1+8,b+8);
for ( i=0x10 ; i<k ; i+=0x10 ) {
SetKey(b1);
Encrypt( b2, b+i ) ;
Encrypt( b2+8, b+i+8 ) ;
memcpy(b1,b2,16);
}
memcpy( Result , b1 , 16 );
//恢复密钥
SetKey(Key);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -