亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? bignum.cpp

?? “網絡安全技術實踐與代碼詳解”實例代碼
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
// BigNum.cpp: implementation of the CBigNum class.////////////////////////////////////////////////////////////////////////#include <string.h>#include <stdio.h>#include <time.h>#include "bignum.h"const char CBigNum::szBase64[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";//////////////////////////////////////////////////////////////////////// Construction/Destruction//////////////////////////////////////////////////////////////////////CBigNum::CBigNum() : m_arVal(0), m_nSize(0){}CBigNum::CBigNum(unsigned int nValue) : m_arVal(0), m_nSize(0){   if (m_arVal != NULL)      delete[] m_arVal;   m_nSize=2;   m_arVal = new unsigned int[m_nSize];   m_arVal[0] = nValue & 0xFFFF;   m_arVal[1] = nValue >> 16;}CBigNum::~CBigNum(){   if (m_arVal != NULL)   {      delete[] m_arVal;      m_arVal = NULL;      m_nSize = 0;   }}CBigNum::CBigNum(const char *szSourceVal) : m_arVal(0), m_nSize(0){   *this=szSourceVal;}CBigNum & CBigNum::operator=(const char *szSourceVal){   unsigned int nLen = strlen(szSourceVal);   unsigned int nIdx;   const char *pChar;   CBigNum Pow10;   operator=(0U);   if (m_arVal != NULL)   {      Pow10 = 1;      for (pChar = szSourceVal + nLen - 1, nIdx=0; pChar >= szSourceVal; pChar--, nIdx++)      {         operator+=(Pow10 * (unsigned int)(*pChar - '0'));         Pow10*=10;      }   }   return *this;}CBigNum &CBigNum::operator+=(const CBigNum &rhs){   unsigned int nIdx;   if (rhs.m_nSize > m_nSize)      Resize(rhs.m_nSize);   for (nIdx = 0; nIdx < rhs.m_nSize; nIdx++)   {      m_arVal[nIdx] += rhs.m_arVal[nIdx];   }      HandleCarry();   return *this;}CBigNum &CBigNum::operator=(unsigned int intVal){   unsigned int nIdx;   for (nIdx = 0; nIdx < m_nSize; nIdx++)   {      m_arVal[nIdx] = 0;   }   if (m_nSize <= 0)      Resize(1);   m_arVal[0] = intVal;      HandleCarry();   return *this;}void CBigNum::HandleCarry(){   unsigned int nIdx;   for (nIdx=0; nIdx < m_nSize; nIdx++)   {      if ((m_arVal[nIdx] & 0xFFFF0000) != 0)      {         if (nIdx >= m_nSize - 1)         {            Resize(nIdx + 2);         }         m_arVal[nIdx+1] += (m_arVal[nIdx] >> 16);         m_arVal[nIdx] &= 0xFFFF;      }   }}void CBigNum::Resize(unsigned int nNewSize){   unsigned int *pNewVal;   unsigned int nIdx;   if (nNewSize > 0)      pNewVal = new unsigned int[nNewSize];   else      pNewVal = NULL;   if (nNewSize < m_nSize)      m_nSize = nNewSize;   for (nIdx=0; nIdx < m_nSize; nIdx++)   {      pNewVal[nIdx] = m_arVal[nIdx];   }   for (;nIdx<nNewSize; nIdx++)   {      pNewVal[nIdx] = 0;   }   if (m_arVal)      delete[] m_arVal;   m_arVal = pNewVal;   m_nSize = nNewSize;}CBigNum &CBigNum::operator>>=(unsigned int rhs){   unsigned int nIdx;   if (m_nSize)   {      while(rhs>=16)      {         for (nIdx=0; nIdx < m_nSize-1; nIdx++)         {            m_arVal[nIdx] = m_arVal[nIdx+1];         }         rhs-=16;         m_arVal[nIdx] = 0;      }   }   for (nIdx=0; nIdx < m_nSize-1; nIdx++)   {      m_arVal[nIdx] = (m_arVal[nIdx] >> rhs) | ((m_arVal[nIdx+1] << (16 - rhs)) & 0xFFFF);   }      if (nIdx < m_nSize)      m_arVal[nIdx] >>= rhs;   return *this;}CBigNum &CBigNum::operator<<=(unsigned int rhs){   unsigned int nIdx;   if (m_nSize)   {      while(rhs>=16)      {         if (m_arVal[m_nSize-1])            Resize(m_nSize+1);         for (nIdx = m_nSize-1; nIdx > 0; nIdx--)         {            m_arVal[nIdx] = m_arVal[nIdx-1];         }         rhs -=16;         m_arVal[0] = 0;      }      if ((m_arVal[m_nSize - 1] << rhs) & 0xFFFF0000)         Resize(m_nSize + 1);   }   if (m_nSize)   {      for (nIdx = m_nSize-1; nIdx > 0; nIdx--)      {         m_arVal[nIdx] = (m_arVal[nIdx] << rhs) | (m_arVal[nIdx-1] >> (16-rhs));         m_arVal[nIdx] &= 0xFFFF;      }      m_arVal[0] <<= rhs;      m_arVal[0] &= 0xFFFF;   }   return *this;}CBigNum CBigNum::operator<<(unsigned int rhs) const{   CBigNum result(*this);   result <<= rhs;   return result;}CBigNum CBigNum::operator>>(unsigned int rhs) const{   CBigNum result(*this);   result >>= rhs;   return result;}CBigNum::operator bool(void) const{   unsigned int nIdx;   for (nIdx=0; nIdx < m_nSize; nIdx++)      if (m_arVal[nIdx]) return true;      return false;}CBigNum & CBigNum::operator&=(CBigNum rhs){   unsigned int nIdx;   unsigned int nMin;   if (rhs.m_nSize < m_nSize)      nMin = rhs.m_nSize;   for (nIdx=0; nIdx < nMin; nIdx++)      m_arVal[nIdx] &= rhs.m_arVal[nIdx];   for (;nIdx < m_nSize; nIdx++)      m_arVal[nIdx] = 0;      return *this;}unsigned int CBigNum::operator&(unsigned int rhs){   if (m_nSize)      return m_arVal[0] & rhs;   else      return 0;}CBigNum &CBigNum::operator=(CBigNum rhs){   if (rhs.m_arVal != m_arVal)   {      delete m_arVal;      m_arVal = NULL;      m_nSize=0;      unsigned int nIdx;      Resize(rhs.m_nSize);      for (nIdx = 0; nIdx < m_nSize; nIdx++)         m_arVal[nIdx] = rhs.m_arVal[nIdx];   }   return *this;}CBigNum CBigNum::Pow(unsigned int rhs) const{   CBigNum Result(1);   CBigNum CurrentVal = *this;   while (rhs)   {      if (rhs & 1U)         Result *=(CurrentVal);      rhs >>= 1;      CurrentVal *= CurrentVal;   }      return Result;}CBigNum CBigNum::PowMod(CBigNum rhs, const CBigNum &mod, const clock_t ctShowSteps) const{   CBigNum Result(1);   CBigNum CurrentVal = *this;   int nSteps = rhs.log2();   clock_t ctStart, ctCurrent;   ctStart = ctCurrent = clock();   while (rhs > 0U)   {      if (rhs.m_arVal[0] & 1U)      {         Result = (Result * CurrentVal) % mod;         Result.Reduce();      }      rhs>>=1U;      CurrentVal = (CurrentVal * CurrentVal) % mod;      CurrentVal.Reduce();      nSteps--;      if (ctShowSteps)      {         if (clock() > ctCurrent + ctShowSteps)         {                      ctCurrent = clock();         }      }   }      return Result;}bool CBigNum::operator==(unsigned int rhs) const{   if (m_nSize>=2)      return ((m_arVal[0] == (rhs & 0xFFFF)) && ((m_arVal[1]<<16) == (rhs & 0xFFFF0000)));   else if (m_nSize==1)      return (m_arVal[0] == rhs);   else      return (rhs == 0);}bool CBigNum::operator!=(unsigned int rhs) const{   return !(operator==(rhs));}CBigNum CBigNum::operator *(const CBigNum &rhs) const{   CBigNum Result=0U;   unsigned int i, j;   if (Result.m_nSize != rhs.m_nSize + m_nSize)      Result.Resize(rhs.m_nSize + m_nSize);   for (i=0; i < m_nSize; i++)   {      for (j=0; j<rhs.m_nSize; j++)         Result.m_arVal[i+j] += m_arVal[i] * rhs.m_arVal[j];      Result.HandleCarry();   }   return Result;}CBigNum &CBigNum::operator *=(const CBigNum &rhs){   return *this = *this * rhs;}CBigNum CBigNum::operator *(unsigned int rhs) const{   unsigned int nIdx;   CBigNum result(*this);   if (result.m_nSize==0)   {      return result;   }   for (nIdx = 0; nIdx < result.m_nSize; nIdx++)   {      result.m_arVal[nIdx] *= rhs;   }   result.HandleCarry();   return result;}CBigNum::CBigNum(const CBigNum &copy) : m_nSize(0), m_arVal(0){   unsigned int nIdx;   Resize(copy.m_nSize);   for (nIdx = 0; nIdx < m_nSize; nIdx++)      m_arVal[nIdx] = copy.m_arVal[nIdx];}CBigNum &CBigNum::operator*=(unsigned int rhs){   unsigned int nIdx;   if (m_nSize <= 0)   {      operator=(0U);   }   else   {      for (nIdx = 0; nIdx < m_nSize; nIdx++)      {         m_arVal[nIdx] *= rhs;      }      HandleCarry();   }   return *this;}CBigNumString::CBigNumString() : m_szBuffer(NULL), m_nSize(0){}CBigNumString::~CBigNumString(){   if (m_szBuffer)   {      delete[] m_szBuffer;      m_szBuffer = NULL;      m_nSize = 0;   }}void CBigNumString::Realloc(unsigned int nByteCount){   if (m_szBuffer)   {      delete[] m_szBuffer;      m_szBuffer = NULL;   }   m_szBuffer = new char[nByteCount];   memset(m_szBuffer, 0, nByteCount);   m_nSize = nByteCount;}CBigNumString::CBigNumString(const CBigNumString &rhs) : m_szBuffer(NULL), m_nSize(0){   if ((rhs.m_szBuffer) && (rhs.m_nSize > 0))   {      m_szBuffer = new char[rhs.m_nSize];      strcpy(m_szBuffer, rhs.m_szBuffer);      m_nSize = rhs.m_nSize;   }}CBigNumString::operator const char *() const{   return m_szBuffer;}CBigNum CBigNum::FromByteString(const char *szIn, const unsigned int nLength){   CBigNum Result;   unsigned int i, r;   unsigned int nUseLength;   if (!nLength)      nUseLength = strlen(szIn);   else      nUseLength = nLength;   Result.m_nSize = (nUseLength+1) >> 1;   Result.m_arVal = new unsigned int[Result.m_nSize];   for (i=0; i<nUseLength; i+=1)   {      r = nUseLength - 1 - i;      if (i % 2)         Result.m_arVal[i >> 1] |= ((unsigned int)szIn[r]) << 8;      else         Result.m_arVal[i >> 1] = szIn[r];   }   return Result;}CBigNum CBigNum::FromHexString(const char *szIn){   CBigNum Result;   unsigned int i, r;   unsigned int nUseLength;   unsigned int nPlaceVal;   nUseLength = strlen(szIn);      Result.m_nSize = (nUseLength+3) >> 2;   Result.m_arVal = new unsigned int[Result.m_nSize];   for (i=0; i<nUseLength; i+=1)   {      r = nUseLength - 1 - i;      if ((szIn[r] >= '0') && (szIn[r] <= '9'))         nPlaceVal = szIn[r] - '0';      else if ((szIn[r] >= 'A') && (szIn[r] <= 'F'))         nPlaceVal = szIn[r] - 'A' + 10;      else if ((szIn[r] >= 'a') && (szIn[r] <= 'f'))         nPlaceVal = szIn[r] - 'a' + 10;      else         nPlaceVal = 0;      if (!(i % 4))         Result.m_arVal[i >> 2] = nPlaceVal;      else         Result.m_arVal[i >> 2] |= nPlaceVal << ((i % 4) << 2);   }   return Result;}CBigNum CBigNum::FromBase64String(const char *szIn){   CBigNum Result;   int i, r;   const char *pc;   unsigned int nUseLength;   unsigned int nByteCount;   unsigned char szCharMap[255];   unsigned char bin[4], bout;      memset(szCharMap, 255, 255);   for (i=0; i<sizeof(szBase64)-1; i++)   {      szCharMap[szBase64[i]] = i;   }   szCharMap['='] = 0;   nUseLength = strlen(szIn);   nByteCount = (nUseLength / 4) * 3;   Result.Resize((nByteCount+1)/2);   for (pc=szIn+nUseLength-1;((pc > szIn) && (255 == szCharMap[*pc]));pc--)      ;   for (r=0; r<4; r++)   {      bin[r] = *pc;      while ((pc > szIn) && (255 == szCharMap[*(--pc)]))         ;   }   i=0;   if (bin[0] == '=')      i=-1;   if (bin[1] == '=')      i=-2;   while (true)   {      if ((i>=0) && ((unsigned)i>>1 < Result.m_nSize))      {         bout = szCharMap[bin[0]] | ((szCharMap[bin[1]] & 0x03) << 6);         Result.m_arVal[i>>1] |= bout << ((i % 2) << 3);      }         i++;      if ((i>=0) && ((unsigned)i>>1 < Result.m_nSize))      {         bout = ((szCharMap[bin[1]] & 0x3C) >> 2) | ((szCharMap[bin[2]] & 0x0F) << 4);         Result.m_arVal[i>>1] |= bout << ((i % 2) << 3);      }      i++;      if ((unsigned)i>>1 < Result.m_nSize)      {         bout = ((szCharMap[bin[2]] & 0x30) >> 4) | (szCharMap[bin[3]] << 2);         Result.m_arVal[i>>1] |= bout << ((i % 2) << 3);      }      i++;      if (pc <= szIn)         break;      for (r=0; r<4; r++)      {         bin[r] = *pc;         while ((pc > szIn) && (255 == szCharMap[*(--pc)]))            ;      }         }   Result.Reduce();   return Result;}CBigNumString CBigNum::ToByteString(bool bMakePrintable) const{   CBigNumString Result;   unsigned int nOutSize = m_nSize * 2;   unsigned int i, r;   while ((nOutSize > 0) && !(m_arVal[(nOutSize-1) >> 1] & (0xFF << (((nOutSize-1) % 2) << 3))))      nOutSize--;   Result.Realloc(nOutSize+1);   for (i=0; i<nOutSize; i++)   {      r = nOutSize - 1 - i;      if (i % 2)         Result[r] = (m_arVal[i >> 1] >> 8) & 0xFF;      else         Result[r] = m_arVal[i >> 1] & 0xFF;      if (bMakePrintable)      {         switch (Result[r] & 0xE0)         {         case 0:            switch(Result[r])            {            case 10: // lf            case 13: // cr               break;            default:               Result[r] = '.';               break;            }            break;         case 0x80:         case 0xA0:         case 0xC0:         case 0xE0:            Result[r] = '.';            break;         default:            break;         }      }   }   Result[nOutSize] = '\0';   return Result;}CBigNumString CBigNum::ToHexString() const{   CBigNumString Result;   unsigned int nOutSize = m_nSize * 4;   unsigned int i, r;   while ((nOutSize > 0) && !(m_arVal[(nOutSize-1) >> 2] & (0xF << (((nOutSize-1) % 4) << 2))))      nOutSize--;   Result.Realloc(nOutSize+1);   for (i=0; i<nOutSize; i++)   {      r = nOutSize - 1 - i;      switch((m_arVal[i >> 2] >> ((i % 4) << 2)) & 0xF)      {      case 0:         Result[r] = '0';         break;      case 1:         Result[r] = '1';         break;      case 2:         Result[r] = '2';         break;      case 3:         Result[r] = '3';         break;      case 4:         Result[r] = '4';         break;      case 5:         Result[r] = '5';         break;      case 6:         Result[r] = '6';

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人精品亚洲人成在线| 日韩精品亚洲一区二区三区免费| 色香色香欲天天天影视综合网| 日本最新不卡在线| 亚洲卡通动漫在线| 久久婷婷国产综合国色天香| 欧美四级电影在线观看| 成人在线视频一区二区| 蜜桃91丨九色丨蝌蚪91桃色| 亚洲精品久久7777| 中文字幕永久在线不卡| 成人亚洲精品久久久久软件| 天天色综合成人网| 亚洲精品国产高清久久伦理二区| 亚洲精品一线二线三线无人区| 欧美视频在线一区| 一本久久综合亚洲鲁鲁五月天| 国产成人一区二区精品非洲| 日本vs亚洲vs韩国一区三区二区 | 91福利在线看| 成人综合婷婷国产精品久久蜜臀| 蜜桃精品在线观看| 日韩精品91亚洲二区在线观看| 国产精品的网站| 国产午夜久久久久| 久久久久久久网| 欧美成人精品福利| 日韩一级在线观看| 欧美精品久久久久久久多人混战| 在线一区二区视频| 一本一本久久a久久精品综合麻豆| 色偷偷一区二区三区| 椎名由奈av一区二区三区| 久久夜色精品国产噜噜av| 欧美一区二区三区在线观看视频| 欧美色图第一页| 在线亚洲+欧美+日本专区| 91免费国产在线| 91香蕉国产在线观看软件| 99re热这里只有精品免费视频 | 日韩精品色哟哟| 亚洲va天堂va国产va久| 亚洲一区二区欧美日韩| 亚洲国产cao| 亚洲第一搞黄网站| 日日噜噜夜夜狠狠视频欧美人| 亚洲福利电影网| 日韩精品视频网| 精一区二区三区| 国产酒店精品激情| 成人午夜av影视| 91香蕉视频污在线| 欧美三级在线视频| 91精品久久久久久久久99蜜臂| 日韩一区和二区| 99久久精品国产一区二区三区| 国产伦精品一区二区三区免费| 国产揄拍国内精品对白| 国产麻豆欧美日韩一区| 成人免费视频播放| 一本大道久久精品懂色aⅴ| 欧美三级一区二区| 在线综合亚洲欧美在线视频| 精品国内二区三区| 中文字幕不卡在线观看| 一区二区成人在线观看| 日本最新不卡在线| 国产不卡在线播放| 91黄色小视频| 日韩精品一区二区三区三区免费 | 国产成人精品一区二| 成人av资源站| 欧美性做爰猛烈叫床潮| 精品国产污污免费网站入口| 日本一区二区三区在线观看| 伊人婷婷欧美激情| 国产精品久久久久久久第一福利| 1024国产精品| 日韩在线a电影| 国产激情偷乱视频一区二区三区| 色噜噜狠狠成人中文综合| 日韩区在线观看| 中文字幕在线不卡一区| 日韩成人免费看| 99在线精品免费| 日韩精品一区在线| 亚洲欧美激情在线| 狠狠久久亚洲欧美| 色婷婷国产精品综合在线观看| 日韩免费在线观看| 亚洲免费在线视频一区 二区| 麻豆免费精品视频| 色播五月激情综合网| 精品国一区二区三区| 亚洲影视在线播放| 国产电影一区在线| 日韩欧美国产电影| 亚洲与欧洲av电影| 成人av电影观看| 久久综合成人精品亚洲另类欧美 | 精品国产一区二区三区不卡| 国产精品1区二区.| 欧洲一区二区三区在线| 精品福利av导航| 亚洲成人免费视频| 99re热视频精品| 久久九九全国免费| 精品一区二区三区欧美| 欧美日本一道本在线视频| 国产精品初高中害羞小美女文| 久久激五月天综合精品| 欧美日韩在线播放三区四区| 国产精品成人一区二区艾草| 国产精品影视网| 日韩欧美一区二区在线视频| 亚洲国产综合色| 91麻豆swag| 亚洲视频综合在线| 成人手机在线视频| 久久婷婷综合激情| 国产呦萝稀缺另类资源| 日韩欧美的一区二区| 日韩精品亚洲专区| 欧美精品18+| 性久久久久久久| 欧美日韩视频一区二区| 亚洲一区二区三区视频在线播放 | 亚洲成人av中文| 国产精品一二三区| 555www色欧美视频| 亚洲电影一区二区| 在线这里只有精品| 亚洲综合男人的天堂| 色综合久久久网| 一区二区三区高清不卡| 色狠狠av一区二区三区| 夜夜爽夜夜爽精品视频| 色偷偷久久一区二区三区| 一区二区三区四区激情| 色狠狠综合天天综合综合| 亚洲精品乱码久久久久久| 97久久超碰国产精品| 亚洲三级在线免费观看| 91蜜桃免费观看视频| 亚洲美腿欧美偷拍| 欧美亚洲综合色| 无码av中文一区二区三区桃花岛| 欧美日韩一区二区三区在线看| 午夜免费久久看| 欧美一区在线视频| 国产米奇在线777精品观看| 国产清纯在线一区二区www| 成人精品免费视频| 综合av第一页| 欧美日韩国产影片| 麻豆成人久久精品二区三区红| 精品国产欧美一区二区| 国产91丝袜在线播放| 国产精品麻豆一区二区| 日本高清不卡一区| 日本欧美一区二区三区| 久久久精品国产免大香伊| 成人毛片在线观看| 亚洲一区二区三区激情| 日韩午夜激情av| 国产精品 欧美精品| 亚洲欧美另类久久久精品| 欧美精品123区| 国产成人在线观看免费网站| 亚洲精品国产第一综合99久久 | 在线免费亚洲电影| 青青草国产成人av片免费| 国产视频一区二区三区在线观看| 色婷婷综合久久久久中文一区二区| 视频在线观看一区| 国产婷婷一区二区| 在线观看成人免费视频| 久久99精品久久只有精品| 国产精品人妖ts系列视频| 欧美在线色视频| 国产成人小视频| 午夜精品久久久久久久| 欧美极品美女视频| 91精品国产免费久久综合| 波多野结衣视频一区| 日韩电影免费在线看| 国产精品久久久久久久午夜片| 欧美剧在线免费观看网站| 成人精品一区二区三区中文字幕 | 丝袜美腿亚洲一区| 欧美国产欧美综合| 91精品国产综合久久婷婷香蕉| 成人性视频免费网站| 老司机午夜精品| 亚洲一级电影视频| 国产精品私房写真福利视频| 欧美一区二区二区| 色狠狠色狠狠综合| 成人激情av网| 久久福利资源站|