📄 cyptdlg.cpp
字号:
for( i=0;i<turn;i++)
{
pBuf[i] = 0;
str = strText.Mid( i*5, 5 );
for( j=0;j<4;j++)
{
WCHAR ch = str.GetAt(j);
if( ch >= 97 && ch <=102 )
{
pBuf[i] |= (ch - 87);
}
else
{
pBuf[i] |= (ch - 48);
}
if( j != 3)
pBuf[i] = pBuf[i]<<4;
}
}
/*************************************************/
double dCpuHz=1.8;
long HighStart,LowStart,HighEnd,LowEnd;
unsigned long numhigh,numlow;
//获取代码运行开始时cpu内部计数器的值
__asm
{
RDTSC
mov HighStart, edx
mov LowStart, eax
}
/*************************************************/
if( m_nSeltype == 0 )
{
for( j=0;j<TURN;j++)
{
for(i=0;i<turn/4;i++)
{
m_idea.Decrypt( pBuf + i*4, sRes + i*4 );
}
}
}
else
{
for( j=0;j<TURN;j++)
{
m_idea.Init( m_ideaKey );
for(i=0;i<turn/4;i++)
{
m_idea.Decrypt( pBuf + i*4, sRes + i*4 );
}
}
}
/*************************************************************/
__asm
{
RDTSC
mov HighEnd, edx
Mov LowEnd, eax
;获取两次计数器值得差
sub eax, LowStart
cmp eax, 0 ; 如果低32的差为负则求反,因为第二次取得永远比第一次的大
jg L3
neg eax
jmp L4
L3: mov numlow, eax
L4: sbb edx, HighStart
mov numhigh, edx
}
m_dwCycle2 = numhigh * pow( 2.0,32 ) + numlow; m_dwCycle2 /= TURN;
m_dwTime2 = m_dwCycle2/dCpuHz/1000000000; m_dwTime2 /= TURN;
m_dwSpeed2 = turn/(m_dwCycle2/dCpuHz/1000000000)/1024;
/***************************************************************/
delete []pBuf;
for(i=0;i<turn;i++)
{
WCHAR ch = sRes[i];
if( ch == 13 )
m_strPlain2.Insert( i, '\r' );
else if( ch == 10 )
m_strPlain2.Insert( i, '\n' );
else
m_strPlain2.Insert( i, sRes[i] );
}
delete []sRes;
}
UpdateData(0);
return 1;
}
bool CCyptDlg::AESDeEncrypt(CString strText, bool bEn)
{
if( strText.IsEmpty() ) return 0;
int i,j, dwSize, len = strText.GetLength();
if( bEn )
{
if( len%16 != 0 ) dwSize = len + 16-len%16;
else dwSize = len;
BYTE *pBuf = new BYTE[ dwSize ];
BYTE *sRes = new BYTE[ dwSize ];
WideCharToMultiByte( CP_ACP,
WC_COMPOSITECHECK,
strText.GetBuffer(len),
len,
(LPSTR)pBuf,
len,
NULL,
NULL
);
if( len%16 != 0 )
{
for(i=1;i<=16-len%16;i++)
{
pBuf[ dwSize - i ] = 0;
}
}
/*************************************************/
double dCpuHz=1.8;
long HighStart,LowStart,HighEnd,LowEnd;
unsigned long numhigh,numlow;
//获取代码运行开始时cpu内部计数器的值
__asm
{
RDTSC
mov HighStart, edx
mov LowStart, eax
}
/*************************************************/
if( m_nSeltype == 0 )
{
for( j=0;j<TURN;j++)
{
for(i=0;i<dwSize/16;i++)
{
m_aes.Encrypt( pBuf + i*16, sRes + i*16 );
}
}
}
else
{
for( j=0;j<TURN;j++)
{
m_aes.Init( m_aesKey );
for(i=0;i<dwSize/16;i++)
{
m_aes.Encrypt( pBuf + i*16, sRes + i*16 );
}
}
}
/*************************************************************/
__asm
{
RDTSC
mov HighEnd, edx
Mov LowEnd, eax
;获取两次计数器值得差
sub eax, LowStart
cmp eax, 0 ; 如果低32的差为负则求反,因为第二次取得永远比第一次的大
jg L1
neg eax
jmp L2
L1: mov numlow, eax
L2: sbb edx, HighStart
mov numhigh, edx
}
m_dwCycle = numhigh * pow( 2.0,32 ) + numlow; m_dwCycle /= TURN;
m_dwTime = m_dwCycle/dCpuHz/1000000000; m_dwTime /= TURN;
m_dwSpeed = dwSize/(m_dwCycle/dCpuHz/1000000000)/1024;
/***************************************************************/
delete []pBuf;
CString str;
for(i=0;i<dwSize;i++)
{
str.Format( _T("%x "), sRes[i] );
if( str.GetLength() == 2 )
str = _T("0") + str;
m_strCipher += str;
}
delete []sRes;
}
else
{
CString str;
int turn = len/3;
BYTE *pBuf = new BYTE[ turn ];
BYTE *sRes = new BYTE[ turn ];
for( i=0;i<turn;i++)
{
str = strText.Mid( i*3, 3 );
WCHAR ch = str.GetAt(0);
if( ch >= 97 && ch <=102 )
{
pBuf[i] = (ch - 87)*16;
}
else
{
pBuf[i] = (ch - 48)*16;
}
ch = str.GetAt(1);
if( ch >= 97 && ch <=102 )
{
pBuf[i] += (ch - 87);
}
else
{
pBuf[i] += (ch - 48);
}
}
/*************************************************/
double dCpuHz=1.8;
long HighStart,LowStart,HighEnd,LowEnd;
unsigned long numhigh,numlow;
//获取代码运行开始时cpu内部计数器的值
__asm
{
RDTSC
mov HighStart, edx
mov LowStart, eax
}
/*************************************************/
if( m_nSeltype == 0 )
{
for( j=0;j<TURN;j++)
{
for(i=0;i<turn/16;i++)
{
m_aes.Decrypt( pBuf + i*16, sRes + i*16 );
}
}
}
else
{
for( j=0;j<TURN;j++)
{
m_aes.Init( m_aesKey );
for(i=0;i<turn/16;i++)
{
m_aes.Decrypt( pBuf + i*16, sRes + i*16 );
}
}
}
/*************************************************************/
__asm
{
RDTSC
mov HighEnd, edx
Mov LowEnd, eax
;获取两次计数器值得差
sub eax, LowStart
cmp eax, 0 ; 如果低32的差为负则求反,因为第二次取得永远比第一次的大
jg L3
neg eax
jmp L4
L3: mov numlow, eax
L4: sbb edx, HighStart
mov numhigh, edx
}
m_dwCycle = numhigh * pow( 2.0,32 ) + numlow; m_dwCycle /= TURN;
m_dwTime = m_dwCycle/dCpuHz/1000000000; m_dwTime /= TURN;
m_dwSpeed = turn/(m_dwCycle/dCpuHz/1000000000)/1024;
/***************************************************************/
delete []pBuf;
CString strRes( sRes );
m_strPlain2 = strRes;
delete []sRes;
}
UpdateData(0);
return 1;
}
void CCyptDlg::OnBnClickedButtonDecrypt()
{
UpdateData();
m_strPlain2.Empty();
if( m_nSel == 0 )
{
CString strKey( m_strPsw );
int i,len = m_strPsw.GetLength();
BYTE key[17];
if( len > 16 )
{
len = 16;
strKey = m_strPsw.Left(16);
}
WideCharToMultiByte( CP_ACP,
WC_COMPOSITECHECK,
strKey.GetBuffer(len),
len,
(LPSTR)key,
len,
NULL,
NULL
);
for( i=len;i<16;i++)
key[i]=i;
m_aes.Init( key );
AESDeEncrypt( m_strCipher, 0);
}
else
{
CString strKey( m_strPsw );
int i,len = m_strPsw.GetLength();
BYTE key[9];
if( len > 8 )
{
len = 8;
strKey = m_strPsw.Left(8);
}
WideCharToMultiByte( CP_ACP,
WC_COMPOSITECHECK,
strKey.GetBuffer(len),
len,
(LPSTR)key,
len,
NULL,
NULL
);
for( i=len;i<8;i++)
key[i]=i;
short unsigned keys[9];
for( i=0;i<8;i++)
keys[i+1] = key[i];
m_idea.Init( keys );
IDEADeEncrypt( m_strCipher, 0);
}
}
void CCyptDlg::OnCbnSelchangeComboAlgri()
{
m_nSel = m_comboAlgi.GetCurSel();
}
void CCyptDlg::OnCbnSelchangeComboTesttype()
{
m_nSeltype = m_comboTesttype.GetCurSel();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -