libcrypt32.cpp 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. // libcrypt32.cpp : Defines the entry point for the DLL application.
  2. //
  3. //#include "stdafx.h"
  4. #include "ccdb2BaseLib.h"
  5. #include <openssl/des.h>
  6. #include <openssl/md5.h>
  7. #include <stdio.h>
  8. //#include "ctypesdef.h"
  9. bool bInited = false;
  10. DES_key_schedule Key;
  11. static unsigned char public_ley[] = {0x30,0x82,0x01,0x0A,0x02,0x82,0x01,0x01,0x00,0xB6,0x01,0x52,0x8E,0x36,0x4D,0xAC,0x77,0xEE,0xCF,0x10,0x16,0x5F,0xF0,0xB4,0x18,0xE0,0x99,0x4F,0x64,0xE2,0x49,0x3E,0xF9,0x3C,0x8E,0xB7,0xEB,0xF7,0xE4,0x00,0x4E,0x95,0x13,0x09,0xA7,0xFA,0xAF,0xAB,0xA8,0xAE,0x16,0x50,0xE0,0xC1,0x15,0xAF,0xC5,0x1D,0x0B,0x51,0x99,0xDE,0x1B,0x3B,0xA4,0xB5,0xA0,0x8A,0x8C,0xD2,0xDF,0xA7,0x16,0xDD,0xFD,0xD6,0x1F,0x0D,0x77,0x59,0x35,0x0C,0xFF,0x4A,0x4C,0xF1,0x1B,0x5A,0x15,0xF0,0xBC,0x61,0xC9,0xE1,0x0C,0xE5,0x9F,0xE1,0xB7,
  12. 0x3E,0xA8,0xA5,0x01,0x9C,0xA6,0xC1,0xBB,0xCF,0x6A,0x1E,0x25,0xCA,0x05,0x4B,0x5C,0x08,0x66,0xBD,0xCE,0x13,0xBD,0x84,0xFB,0x6C,0x38,0xDC,0x67,0x21,0x86,0x7E,0xB4,0xD2,0x60,0x1F,0xA2,0xD4,0xDB,0x89,0x5D,0x81,0x8D,0x4A,0xF2,0xA2,0x68,0x96,0xCC,0x1F,0x75,0x54,0x66,0x64,0xA3,0x85,0x16,0xF7,0x7E,0x84,0xD1,0xD0,0x6D,0x20,0xFC,0x2A,0x2F,0x67,0xAF,0x51,0xA7,0x1F,0xAD,0x4D,0xC1,0x9B,0x06,0x81,0x2D,0x60,0x4D,0x31,0xD4,0x08,0x9C,0xAD,0xEA,0x33,0x48,0xE4,0x25,0x15,0xDF,0x52,0xC0,0x40,0x14,0xD0,0xEC,0x06,0xD3,0xAA,0x9A,0x5D,0x63,0x98,0xB8,0x5B,0xA6,0x4C,0x17,0x57,0xC4,0x15,0xAA,0x50,0x0B,0x70,0x01,0x4F,0x76,0xA2,0x92,0x95,0x71,0x5E,0x9B,0x8B,0xA8,0xB2,0xAC,0x80,0xB7,0x8E,0x2E,0xDD,0xB4,0x85,0xA6,0x8E,0xC2,0xEE,0xAE,0x6F,0x1B,0x5C,0xDA,0xEF,0x5F,0xDE,0xD7,0xF9,0x16,0x2B,0xCD,0x26,0x21,0x6E,0x66,0x25,0x9B,0x03,0x83,0xD3,0xEB,0x1B,0xE3,0x02,0x03,0x01,0x00,0x01};
  13. static unsigned char random_bin[] = {
  14. 0xA9,0x92,0x81,0xC1,0x70,0x28,0x74,0xCB,0x2F,0x27,0xAC,0xFB,0x99,0xE8,0x89,0xB0,0x32,0xA4,0xB3,0x2F,0xF0,0x75,0x26,0xE9,0x39,0x67,0xD0,0x9D,0x31,0xF6,0xE8,0xCA,0xBB,0xFB,0xBD,0xA0,0xF7,0xEC,0x22,0x74,0x47,0x86,0x9B,0xD9,0xC8,0x05,0x23,0x89,0x7E,0x4F,0x2F,0xA5,0x97,0xA0,0x0A,0x70,0x51,0x1A,0x8C,0x47,0xAD,0x86,0xA6,0xFF,0x30,0x02,0xAC,0x9E,0x00,0x40,0x83,0xC8,0x8B,0xCE,0xAF,0x31,0xD4,0x7F,0xF2,0x40,0xFB,0x7E,0x11,0x41,0x80,0x70,0x55,0xD0,0x45,0x9A,0x2B,0x37,0xD3,0x4E,0xFA,0x59,0x0A,0x2C,0x0A,0xB5,0x9D,0x99,0xA6,0xD1,0x21,0xE3,
  15. 0x15,0xEE,0x9F,0xA5,0xB4,0xD3,0x6B,0x07,0x92,0x86,0x22,0xED,0x78,0x18,0xD5,0x3B,0x88,0x23,0x31,0x3F,0x3A,0x22,0xA4,0x8F,0x4F,0xDF,0x2F,0x3B,0x24,0x09,0x01,0x2F,0x0A,0xFC,0xD2,0x6F,0xBE,0x82,0x7F,0xCD,0xF4,0xD8,0xD1,0xDB,0x60,0xB2,0x13,0x06,0xF8,0x8C,0xEE,0x3A,0xD8,0x4C,0x0C,0x8A,0xFB,0xAA,0x8E,0x06,0xA7,0xAD,0x25,0xE1,0xCC,0x2F,0x7B,0x21,0x7C,0x6A,0x37,0xE6,0x5D,0xF3,0xD1,0x45,0x57,0x1C,0x96,0xFE,0x18,0x5D,0x87,0x24,0x18,0x6E,0x55,0x8E,0x37,0xE3,0x0F,0xCF,0x09,0x94,0xDE,0xB0,0x76,0x5C,0xF2,0x99,0xE1,0x99,0xB0,0xB3,0x29,0x61,0x3A,0x98,0x25,0x2B,0xCA,0xC8,0xA8,0x59,0x5F,0x9B,0xE0,0x14,0xAD,0x5D,0x59,0x3E,0x3E,0x71,0x8B,0x1F,0x7C,0x85,0xAD,0x31,0xCF,0x43,0x9D,0x05,0x03,0x6A,0xC4,0x84,0x40,0x5A,0xD6,0xBF,0xD9,0x38,0xCF,0xC8,0xDC,0x9E,0x69,0x51,0xFD,0x3F,0xDA,0xFD,0xAA,0x93,0xE4,0x43,0x86,0x50,0x71,0xA9,0x4F,0xBD,0xC7,0x3E,0x0D,0x5B,0xED,0x78,0x6D,0xE8,0xE9,0xF1,0x7C,0x06,0x75,0xFF,0xB1,0xFD,0x66,0x72,0x2E,0x03,0xA7,0x24,0xDD,0x4D,0x4A,0x1D,0x8B,0x22,0x81,0x7B,0x99,0x8D,0x18,0x6C,0x37,0xA7,0x08,0x25,0x9A,0x8C,0xFB,0x31,0xEC,0xFB,0xD4,0x4D,0xC1,0xCB,0xA3,0x80,0xF6,0x52,0xC1,0x0C,0xAA,0x7B,0x0A,0xE1,0x27,0xE1,0x38,0xF5,0xFF,0xAF,0x9B,0x1F,0xB1,0x68,0x4A,0x76,0x80,0xC0,0x2C,0xF1,0x9F,0xBF,0x2D,0xA2,0x37,0xF0,0x1D,0xE7,0x40,0xEC,0x6A,0x60,0x06,0xB8,0x4A,0x6D,0x90,0xF4,0x37,0xDC,0xFF,
  16. 0x2B,0x79,0x99,0x17,0x9C,0x49,0x3F,0xCB,0x4B,0x2B,0x99,0x8E,0x4A,0x6C,0x60,0x08,0x3B,0xC5,0x88,0x38,0x2A,0xE3,0x9D,0xE4,0x66,0xB0,0x25,0x47,0xA1,0x4A,0xBB,0xCB,0xA0,0x6F,0x7E,0x51,0x5F,0xF8,0xA4,0x68,0xD7,0x5C,0x0B,0xC8,0x41,0x6D,0x20,0xE5,0xF4,0x4A,0xCE,0xDB,0x5D,0xC3,0x69,0x8B,0xD1,0x15,0x03,0xE1,0x8A,0x9C,0x45,0x72,0xB8,0xF1,0x4E,0x1E,0xF8,0xA5,0xAC,0x70,0xBF,0xDE,0x66,0x9E,0xD6,0xD8,0x4C,0x88,0x40,0x74,0x3C,0x32,0x50,0x0C,0xEE,0x11,0x61,0x2D,0x4C,0xE3,0xDB,0x29,0xB5,0x30,0x5C,0xF4,0x9E,0xD2,0xDA,0x8D,0xD9,0x2C,0x5C,0x45,0x12,0x44,0xC3,0xC3,0x1B,0x9A,0x9D,0x21,0x9B,0xF6,0x2A,0x11,0x6B,0xB3,0xB0,0x95,0xC1,0xB2,0xC8,0x4A,0x68,0xD9,0x73,0xA2,0x8F,0xFC,0x22,0xEC,0x96,0x2A,0x5E,0x63,0xD9,0x38,0xD4,0x66,0x6A,0x16,0xAB,0xFB,0x05,0x60,0x0A,0x9B,0x74,0x2F,0xB2,0x01,0x96};
  17. BOOL InitLib( )
  18. {
  19. if (bInited)
  20. return TRUE;
  21. ccClearErrorString();
  22. //int i;
  23. //for (i = 0 ; i < (int)sizeof(public_ley) ;i++)
  24. // printf("%02x",public_ley[i]);
  25. RSA *pPublicKey=ccD2I_RsaPublic(public_ley,sizeof(public_ley));
  26. //for (i = 0 ; i < (int)sizeof(RSA) ;i++)
  27. // printf("%02x",((unsigned char *)pPublicKey)[i]);
  28. if(pPublicKey==NULL)
  29. return false;
  30. SmartBuffer Signer;
  31. SmartBuffer Random=ccPublicDecryptStream(pPublicKey,random_bin,sizeof(random_bin),Signer);
  32. RSA_free(pPublicKey);
  33. if(Random.IsNull())
  34. return false;
  35. SmartBuffer PrintBuf=ccHash(Random.pBuf,Random.nLen);
  36. if(PrintBuf.IsNull())
  37. return false;
  38. DES_set_key_unchecked((const_DES_cblock *)PrintBuf.pBuf,&Key);
  39. bInited = TRUE;
  40. return TRUE;
  41. }
  42. unsigned char *PickupFingerprint(const unsigned char *pInBuf,int nLen,unsigned char *pOutBuf)
  43. {
  44. if(pInBuf==NULL || nLen<0 || pOutBuf==NULL)
  45. return NULL;
  46. if(MD5(pInBuf,nLen,pOutBuf)==NULL)
  47. return NULL;
  48. return pOutBuf;
  49. }
  50. unsigned char *FieldCrypt(const unsigned char *pInBuf,int nLen,const unsigned char *pSeed,unsigned char *pOutBuf)
  51. {
  52. if(nLen==0 || pInBuf==NULL || pOutBuf==NULL)
  53. return NULL;
  54. InitLib();
  55. const int nDesBlock=8;
  56. DES_cblock iv;
  57. memcpy(iv,pSeed,nDesBlock);
  58. DES_cblock Seedblock;
  59. DES_ncbc_encrypt(pSeed+nDesBlock,(BYTE *)&Seedblock,nDesBlock,&Key,&iv,DES_ENCRYPT);
  60. DES_key_schedule Seedkey;
  61. DES_set_key_unchecked(&Seedblock,&Seedkey);
  62. int nFistBlockLen(0),nRemainLen(0);
  63. if(nLen<=nDesBlock)
  64. {
  65. nFistBlockLen=nLen;
  66. nRemainLen=0;
  67. }
  68. else
  69. {
  70. nRemainLen=nLen%nDesBlock;
  71. nFistBlockLen=nLen-nRemainLen;
  72. }
  73. DES_cbc_encrypt(pInBuf,pOutBuf,nFistBlockLen,&Seedkey,&iv,DES_ENCRYPT);
  74. if(nRemainLen>0)
  75. {
  76. unsigned char TempBuf[nDesBlock];
  77. int nPadLen=nDesBlock-nRemainLen;
  78. memcpy(TempBuf,pOutBuf+nFistBlockLen-nPadLen,nPadLen);
  79. memcpy(TempBuf+nPadLen,pInBuf+nFistBlockLen,nRemainLen);
  80. DES_cbc_encrypt(TempBuf,pOutBuf+nFistBlockLen-nPadLen,sizeof(DES_cblock),&Seedkey,&iv,DES_ENCRYPT);
  81. }
  82. return pOutBuf;
  83. }
  84. unsigned char *FieldDecrypt(const unsigned char *pInBuf,int nLen,const unsigned char *pSeed,unsigned char *pOutBuf)
  85. {
  86. if(nLen<8 || pInBuf==NULL || pOutBuf==NULL)
  87. return NULL;
  88. InitLib();
  89. const int nDesBlock=8;
  90. DES_cblock iv;
  91. memcpy(iv,pSeed,nDesBlock);
  92. DES_cblock Seedblock;
  93. DES_ncbc_encrypt(pSeed+nDesBlock,(BYTE *)&Seedblock,nDesBlock,&Key,&iv,DES_ENCRYPT);
  94. DES_key_schedule Seedkey;
  95. DES_set_key_unchecked(&Seedblock,&Seedkey);
  96. int nRemainLen=nLen%nDesBlock,nFistBlockLen=nLen-nRemainLen;
  97. SmartBuffer InBuf;
  98. InBuf.Copy(pInBuf,nLen);
  99. if(nRemainLen>0)
  100. {
  101. BYTE TempBuf[nDesBlock];
  102. int nPadLen=nDesBlock-nRemainLen;
  103. DES_cbc_encrypt(InBuf.pBuf+nFistBlockLen-nPadLen,TempBuf,sizeof(DES_cblock),&Seedkey,&iv,DES_DECRYPT);
  104. memcpy(InBuf.pBuf+nFistBlockLen-nPadLen,TempBuf,nPadLen);
  105. memcpy(pOutBuf+nFistBlockLen,TempBuf+nPadLen,nRemainLen);
  106. }
  107. DES_cbc_encrypt(InBuf.pBuf,pOutBuf,nFistBlockLen,&Seedkey,&iv,DES_DECRYPT);
  108. return pOutBuf;
  109. }