?? 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 + -