📄 des32.cpp
字号:
#include "stdafx.h"
#include "des32.h"
#ifdef _WIN32
#define _DES32_ASM_
#else
#endif
CDes32::CDes32( DWORD key )
{
for( int i=0; i<4; i++ )
{
m_SubKey[i] = LOWORD( key );
key = key>>4;
}
}
#ifdef _DES32_ASM_
void CDes32::Encrypt( BYTE *pSrc, BYTE *pDest, DWORD len )
{
__asm
{
mov esi, pSrc
mov edi, pDest
mov edx, this
looplb:
cmp len, 4
jb outloop
mov eax, dword ptr [esi]
mov bx, ax
shr eax, 16
add esi, 4 // now ax is R, bx is L
mov cx, word ptr [edx] //subkey[0]
add cx, ax
xor bx, cx
mov cx, word ptr [edx+2] //subkey[1]
add cx, bx
xor ax, cx
ror bx, 8
ror ax, 8 // now bx is R, ax is L
mov cx, [edx+4] //subkey[2]
add cx, bx
xor ax, cx
mov cx, [edx+6] //subkey[3]
add cx, ax
xor bx, cx
ror ax, 8
ror bx, 8 // now ax is R, bx is L
mov cx, [edx+6] //subkey[3]
add cx, ax
xor bx, cx
mov cx, [edx+4] //subkey[2]
add cx, bx
xor ax, cx
ror bx, 8
ror ax, 8 // now bx is R, ax is L
mov cx, [edx+2] //subkey[1]
add cx, bx
xor ax, cx
mov cx, [edx] //subkey[0]
add cx, ax
xor bx, cx
shl eax, 16 // ax=0
or ax, bx //eax == LR(HIWORD,LOWORD)
mov dword ptr [edi], eax
add edi, 4
sub len, 4
jmp looplb
outloop:
mov ecx, len
surloop:
cmp ecx, 0
je quit
mov ah, byte ptr [esi]
not ah
mov byte ptr [edi], ah
inc esi
inc edi
dec ecx
jmp surloop
quit:
}
}
#else
void CDes32::Encrypt( BYTE *pSrc, BYTE *pDest, DWORD len )
{
WORD L,R,t;
while( len >=4 )
{
L = *(WORD*)pSrc;
pSrc += 2;
R = *(WORD*)pSrc;
pSrc += 2;
L = ( R+m_SubKey[0] )^L;
R = (L+m_SubKey[1])^R;
t = L;
L = MAKEWORD( HIBYTE(R), LOBYTE(R) );
R = MAKEWORD( HIBYTE(t), LOBYTE(t) );
L = ( R+m_SubKey[2] )^L;
R = (L+m_SubKey[3])^R;
t = L;
L = MAKEWORD( HIBYTE(R), LOBYTE(R) );
R = MAKEWORD( HIBYTE(t), LOBYTE(t) );
L = ( R+m_SubKey[3] )^L;
R = (L+m_SubKey[2])^R;
t = L;
L = MAKEWORD( HIBYTE(R), LOBYTE(R) );
R = MAKEWORD( HIBYTE(t), LOBYTE(t) );
L = ( R+m_SubKey[1] )^L;
R = (L+m_SubKey[0])^R;
t = L;
L = R;
R = t;
*((DWORD*)pDest) = MAKELONG( L, R );
pDest += 4;
len -= 4;
}//while
for( DWORD i=0; i<len; i++ )
*pDest++ = ~(*pSrc++);
}
#endif //_DES32_ASM_
#undef _DES32_ASM_
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -