KSG_EncodeDecode.cpp
上传用户:dzyhzl
上传日期:2019-04-29
资源大小:56270k
文件大小:2k
源码类别:

模拟服务器

开发平台:

C/C++

  1. //////////////////////////////////////////////////////////////////////////////////////
  2. //
  3. //  FileName    :   KSG_EncodeDecode.cpp
  4. //  Version     :   1.0
  5. //  Creater     :   
  6. //  Date        :   2003-6-3 10:28:57
  7. //  Comment     :   
  8. //
  9. //////////////////////////////////////////////////////////////////////////////////////
  10. #include "stdafx.h"
  11. #include "KSG_EncodeDecode.h"
  12. int KSG_DecodeEncode(size_t uSize, unsigned char *pbyBuf, unsigned *puKey)
  13. {
  14.     unsigned *puBuf = (unsigned *)pbyBuf;
  15.     unsigned uKey = *puKey;
  16.     unsigned uRemainSize = uSize % 4;
  17.     uSize /= 4;
  18.     while (uSize-- > 0)
  19.         *puBuf++ ^= uKey;
  20.     pbyBuf = (unsigned char *)puBuf;
  21.     
  22.     while (uRemainSize-- > 0)
  23.     {
  24.         *pbyBuf++ ^= (unsigned char)(uKey & 0xff);
  25.         uKey >>= 8;
  26.     }
  27.     *puKey = (*puKey * 31) + 134775813L;
  28.     return true;
  29. }
  30. int KSG_DecodeEncode_ASM(size_t uSize, unsigned char *pbyBuf, unsigned *puKey)
  31. {
  32.     __asm mov eax, [uSize]
  33.     __asm mov esi, [puKey]
  34.     __asm mov edi, [pbyBuf]
  35.     __asm mov ecx, eax
  36.     __asm mov edx, [esi]        // key
  37.     __asm shr eax, 2
  38.     __asm jz  Next1
  39.    
  40.     Loop1:
  41.     __asm mov ebx, [edi]
  42.     __asm add edi, 4
  43.     __asm xor ebx, edx
  44.     __asm dec eax
  45.     __asm mov [edi - 4], ebx
  46.     __asm jnz Loop1
  47.     Next1:
  48.     __asm and ecx, 3
  49.     __asm mov eax, edx  // Key
  50.     __asm jz Next2
  51.     Loop2:
  52.     __asm mov bl, [edi]
  53.     __asm inc edi
  54.     __asm xor bl, al
  55.     __asm shr eax, 8
  56.     __asm mov [edi - 1], bl
  57.     __asm dec ecx
  58.     __asm jnz Loop2
  59.     Next2:
  60.     __asm mov eax, edx      // NewKey = OldKey * 31 +  134775813L
  61.     __asm shl edx, 5
  62.     __asm sub edx, eax
  63.     __asm add edx, 134775813    // 08088405H
  64.     __asm mov [esi], edx
  65.     return true;
  66. }