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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? rsakey.cpp

?? rsa的c++實現(xiàn),此程序?qū)崿F(xiàn)使用公鑰的加密
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
{
  s << k.key.pubexp << k.key.prvexp << k.key.mod << k.key.p << k.key.q
    << k.key.ep << k.key.eq << k.key.r;

  write_ind_ushort (s, k.key.bitlen_mod);
  write_ind_ushort (s, k.key.bytelen_mod);

  return s;
}


fstream& operator>> (fstream& s, RSAkey& k)
{
  s >> k.key.pubexp >> k.key.prvexp >> k.key.mod >> k.key.p >> k.key.q
    >> k.key.ep >> k.key.eq >> k.key.r;

  read_ind_ushort (s, &k.key.bitlen_mod);
  read_ind_ushort (s, &k.key.bytelen_mod);

  return s;
}




//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


// Member functions of class RSApub

// Constructor
RSApub::RSApub (const RSAkey& k)
{
  pkey = k.export_public ();
}



RSApub::RSApub (const PKEYSTRUCT& p)
{
	pkey.bitlen_mod = p.bitlen_mod;
	pkey.bytelen_mod = p.bytelen_mod;
	pkey.mod = p.mod;
	pkey.pubexp =p.pubexp ;
}


// RSA-encryption
LINT RSApub::crypt (const UCHAR* const  Mess, const int LenMess)
{
	int LenEncryptionBlock = pkey.bytelen_mod - 1;
  UCHAR* EncryptionBlock = new UCHAR[LenEncryptionBlock];

  // Format Encryption Block acc. to PKCS#1
  if (NULL == format_pkcs1 (EncryptionBlock,
                            LenEncryptionBlock,
                            BLOCKTYPE_ENCR,
                            Mess,
                            (ULONG)LenMess))
    {
      delete [] EncryptionBlock;
      return LINT (0);             // Error: Message too long
    }

#ifdef FLINT_TEST
  cout_mess ((const char*)EncryptionBlock, LenEncryptionBlock, "Encryption Block before encryption");
#endif

  // Convert Encryption Block into LINT-value (Constructor 3)
  LINT m = LINT (EncryptionBlock, LenEncryptionBlock);
  delete [] EncryptionBlock;

  return (mexpkm (m, pkey.pubexp, pkey.mod));
}


// Verify RSA-signature
UCHAR* RSApub::verify (int* length, const LINT& Signature)
{
 // verification = 0;
 // UCHAR H1[RMDVER>>3];
  UCHAR* H2 = lint2byte (mexpkm (Signature, pkey.pubexp, pkey.mod), length);

 // ripemd160 (H1, (UCHAR*)Mess, (ULONG)LenMess);

#ifdef FLINT_TEST
  cout_mess ((const char*)H2, pkey.bytelen_mod - 1, "Encryption Block when signature is being verified");
#endif

  // Read data from decrypted Encryption Block, PKCS#1-formatted
 // H2 = parse_pkcs1 (H2, &length);
  return   parse_pkcs1 (H2, length);
  

 /* if (length == (RMDVER >> 3))
    {
      verification = !memcmp ((char*)H1, (char*)H2, RMDVER >> 3);
    }

#ifdef FLINT_TEST
  cout_mess ((const char*)H2, length, "Hash-Wert when signature is being verified");
  cout << "Verification = " << verification << endl;
#endif

  return verification;*/
}


// Delete public key
void RSApub::purge (void)
{
  pkey.pubexp.purge ();
  pkey.mod.purge ();
  pkey.bitlen_mod = 0;
  pkey.bytelen_mod = 0;
}


// Operators =, ==, != of class RSApub

RSApub& RSApub::operator= (const RSApub &k)
{
  if ((&k != this)) // Don't copy object into itself
    {
      pkey.pubexp      = k.pkey.pubexp;
      pkey.mod         = k.pkey.mod;
      pkey.bitlen_mod  = k.pkey.bitlen_mod;
      pkey.bytelen_mod = k.pkey.bytelen_mod;
    }
  return *this;
}


int operator== (const RSApub& k1, const RSApub& k2)
{
  if (&k1 == &k2)       //lint !e506
    {
      return 1;
    }

  return (k1.pkey.pubexp      == k2.pkey.pubexp      &&
          k1.pkey.mod         == k2.pkey.mod         &&
          k1.pkey.bitlen_mod  == k2.pkey.bitlen_mod  &&
          k1.pkey.bytelen_mod == k2.pkey.bytelen_mod);

  // Operator == returns 1 if k1 == k2, 0 else
}


int operator!= (const RSApub& k1, const RSApub& k2)
{
  if (&k1 == &k2)       //lint !e506
    {
      return 0;
    }

  return (k1.pkey.pubexp      != k2.pkey.pubexp      ||
          k1.pkey.mod         != k2.pkey.mod         ||
          k1.pkey.bitlen_mod  != k2.pkey.bitlen_mod  ||
          k1.pkey.bytelen_mod != k2.pkey.bytelen_mod);

  // Operator != returns 1 if k1 != k2, 0 else
}


fstream& operator<< (fstream& s, const RSApub& k)
{
  s << k.pkey.pubexp << k.pkey.mod;

  write_ind_ushort (s, k.pkey.bitlen_mod);
  write_ind_ushort (s, k.pkey.bytelen_mod);

  return s;
}


fstream& operator>> (fstream& s, RSApub& k)
{
  s >> k.pkey.pubexp >> k.pkey.mod;

  read_ind_ushort (s, &k.pkey.bitlen_mod);
  read_ind_ushort (s, &k.pkey.bytelen_mod);

//s >> k.pkey.bitlen_mod >> k.pkey.bytelen_mod;

  return s;
}


// Format Encryption Blocks (EB) acc. to PKCS#1
// EB    = BT||PS1...PSl||00||DATA1...DATAk
// BT    = Block Type public key operation:
//             01 private key operation (signing)
//             02 public key operation (encryption)
// PSi   = BT 01: Value FF (hex), 8 Byte at least
//         BT 02: Random values, not zero, 8 bytes at least
// DATAi = Data bytes, k <= (byte length of modulus) - 10, pointed to by
//         parameter data, length k in parameter LenData
// Parameter EB points to buffer for Encryption Block
// buffer  must be allocated by calling function, length of buffer at least
// byte length of modulus

UCHAR* format_pkcs1 (const UCHAR* EB, const int LenEB, const UCHAR BlockType, const UCHAR* data, const int LenData)
{
  // Calculate length lps of padding block
  int lps = LenEB - 2 - LenData;

  if (lps < 8)                     // PKCS#1: Length padding block >= 8
    {
      return NULL;                 // NULL pointer indicates error status
    }

  UCHAR* hlp = (UCHAR*)EB;

  switch (BlockType)
    {
      case 01:
        *hlp++ = 0x01;             // Block Type 01: Private Key Operation
        while (lps-- > 0)
          {
            *hlp++ = 0xff;         // 8 <= lps Werte FF (hex)
          }
        break;
      case 02: *hlp++ = 0x02;      // Block Typ 02: Public Key Operation
        while (lps-- > 0)
          {
            do
              {
                *hlp = ucrandBBS_l ();
              }                    // 8 <= lps random bytes not zero
            while (*hlp == 0);
            ++hlp;
          }
        break;
      default:
        return NULL;               // Error: Undefined Block Type in BlockType
    }

  *hlp++ = 0x00;                   // Separation byte

  for (int l = 1; l <= LenData; l++)
    {
      *hlp++ = *data++;
    }

  return (UCHAR*)EB;
}


// Parser for decrypted Encryption Block, PKCS#1-formatted
// Returns pointer to data as payload contained in EB,
// Length of data (number of bytes) is stored in LenData
// NULL is returned to indicate format error status

UCHAR* parse_pkcs1 (const UCHAR* eb, int* LenData)
{
  UCHAR* hlp = (UCHAR*)eb;
  UCHAR BlockType;
  int error = 0, noofpadc = 0;

  if ((BlockType = *hlp) > 2) // Check Block Type: 00, 01, 02 are valid
    {
      return (UCHAR*)NULL;
    }

  ++hlp;
  --*LenData;
  switch (BlockType)
    {
      case 0:
      case 1:                 // Block Type 00 oder 01: Private Key Operation
        while (*hlp != 0 && *LenData > 0)  // Analyse padding string PS
          {
            if (*hlp != 0xff)
              {
                error = 1;    // Check padding == 0xFF for Block Type 01
                break;        // Set errorflag error to 1 if byte != 0xFF
              }
            ++hlp;
            --*LenData;
            ++noofpadc;
          };
        break;
      case 2:                 // Block Type 02: Public Key Operation
        while (*hlp != 0 && *LenData > 0)  // Search end of padding string PS
          {
            ++hlp;
            --*LenData;
            ++noofpadc;
          };
        break;
      default:
        return (UCHAR*)NULL;  // Invalid Block Typ
    }

  if (noofpadc < 8 || error || *LenData == 0)
    {                         // Summarize result of padding check
      return (UCHAR*)NULL;    // Error status indicated by NULL
    }
  else
    {
      ++hlp;                  // Skip separation byte 00
      --*LenData;             // Byte length of payload in LenData
    }

  return hlp;                 //Return Pointer to payload
}


#ifdef FLINT_TEST
// Output of message as Hex-value
static void cout_mess (const char* mess, const int len, const char* const titel)
{
  cout << titel << " = " << hex
       << setfill ('0') << resetiosflags (ios::showbase);

  for  (int i = 0; i < len; i++)
    {
      cout << setw (2) << (((unsigned)*mess++) & 0xff);
    }

  cout << setfill (' ') << resetiosflags (ios::hex) << endl;
}
#endif





?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美国产精品一区二区三区| 欧美熟乱第一页| 亚洲夂夂婷婷色拍ww47| 91精品国产手机| 成人毛片在线观看| 日本午夜一区二区| 亚洲少妇屁股交4| 精品处破学生在线二十三| 97久久超碰精品国产| 极品美女销魂一区二区三区免费| 亚洲码国产岛国毛片在线| 精品成人在线观看| 在线一区二区三区做爰视频网站| 国产成+人+日韩+欧美+亚洲| 首页亚洲欧美制服丝腿| 亚洲男人天堂一区| 欧美激情在线看| 精品三级在线看| 欧美三区在线视频| 色婷婷综合久久久| 成人激情免费视频| 国内成人自拍视频| 理论片日本一区| 日本不卡不码高清免费观看| 亚洲中国最大av网站| 一片黄亚洲嫩模| 18成人在线观看| 成人欧美一区二区三区| 国产精品乱人伦| 国产视频在线观看一区二区三区| 日韩免费看的电影| 日韩三级精品电影久久久| 精品视频免费在线| 91黄视频在线观看| 在线免费观看日本一区| 91在线高清观看| 99久久er热在这里只有精品66| 成人a区在线观看| 粉嫩一区二区三区在线看| 国产一区二区电影| 国产精品69久久久久水密桃| 国产一区二区三区最好精华液| 日本亚洲视频在线| 国内精品伊人久久久久av影院| 麻豆freexxxx性91精品| 久久精品免费观看| 国产在线一区二区综合免费视频| 国产一区免费电影| 国产精品123| caoporm超碰国产精品| 99riav一区二区三区| 91小视频在线免费看| 日本高清不卡aⅴ免费网站| 日本福利一区二区| 欧美精品精品一区| 欧美大片在线观看| 欧美国产精品v| 亚洲婷婷在线视频| 亚洲第一av色| 看国产成人h片视频| 国产精品一区在线观看你懂的| 国产成人精品网址| 色婷婷精品久久二区二区蜜臀av| 在线观看免费亚洲| 欧美一二三区在线| 日本一区免费视频| 亚洲精品日韩综合观看成人91| 亚洲国产成人av网| 韩国一区二区视频| 色综合久久中文字幕综合网| 欧美日韩一卡二卡| 26uuu精品一区二区| 国产精品久久久久久久久果冻传媒| 伊人色综合久久天天| 蜜桃av一区二区三区电影| 国产成人综合自拍| 色狠狠色噜噜噜综合网| 日韩一区二区在线播放| 中文字幕精品一区二区精品绿巨人 | 美女视频网站久久| 国产成人精品午夜视频免费| 欧美日韩免费一区二区三区| 国产午夜精品福利| 亚洲小说欧美激情另类| 国产一区二区视频在线| 在线观看av不卡| 国产婷婷色一区二区三区| 亚洲国产成人av| 成人av资源下载| 日韩一级片在线播放| 国产精品丝袜黑色高跟| 日韩av中文字幕一区二区| av网站一区二区三区| 欧美一激情一区二区三区| 亚洲欧美另类综合偷拍| 国产一区二区三区四区五区美女 | 精品日韩一区二区三区免费视频| 国产精品激情偷乱一区二区∴| 首页综合国产亚洲丝袜| 99国产精品久| 欧美精品一区二区三区蜜桃| 国产专区欧美精品| 91美女精品福利| 99国产欧美另类久久久精品| 日韩一区二区免费在线电影| 亚洲激情校园春色| 国产成人在线看| 日韩欧美国产麻豆| 亚洲丰满少妇videoshd| 高清不卡一区二区| 日韩视频123| 日韩av二区在线播放| 日本韩国欧美一区二区三区| 国产精品国产三级国产普通话99| 久久精品国产999大香线蕉| 欧美这里有精品| 亚洲四区在线观看| 成人av电影在线观看| 欧美精品一区二区在线观看| 日本伊人色综合网| 欧美日韩电影在线| 亚洲尤物在线视频观看| 97国产精品videossex| 国产精品久久久久久久久快鸭 | 一本色道久久综合精品竹菊| 亚洲国产成人在线| 国产精品18久久久久久久网站| 日韩午夜精品电影| 奇米精品一区二区三区在线观看一| 欧美午夜不卡视频| 亚洲午夜电影在线| 在线亚洲+欧美+日本专区| 亚洲免费观看视频| 91美女片黄在线观看| 亚洲精品免费看| 在线免费av一区| 亚洲一区二区欧美激情| 欧美视频中文字幕| 亚洲va国产va欧美va观看| 欧美日韩午夜在线视频| 亚洲va韩国va欧美va| 欧美狂野另类xxxxoooo| 日韩国产一二三区| 日韩精品在线一区二区| 国产一区二区福利| 国产精品进线69影院| 色欧美片视频在线观看 | 午夜不卡av免费| 777a∨成人精品桃花网| 日韩av电影一区| 精品国产一区二区在线观看| 韩国女主播成人在线观看| 久久久久久久国产精品影院| 不卡一区二区三区四区| 亚洲女同ⅹxx女同tv| 欧美午夜精品一区二区三区| 丝袜国产日韩另类美女| 精品奇米国产一区二区三区| 国产美女在线精品| 中文字幕一区二区三区四区不卡| av亚洲精华国产精华精华| 一区二区三区视频在线观看| 91精品国产综合久久蜜臀| 日本美女视频一区二区| 久久久久久久精| 91国偷自产一区二区三区观看| 午夜私人影院久久久久| 欧美电影免费观看高清完整版在线 | av男人天堂一区| 亚洲国产成人91porn| 欧美大胆一级视频| 成人h动漫精品| 视频一区二区国产| 国产亚洲成aⅴ人片在线观看| 91啦中文在线观看| 蜜臀久久久久久久| 中文字幕综合网| 欧美一区二区三区白人| 风间由美一区二区av101| 亚洲一区视频在线| 国产亚洲精品bt天堂精选| 色婷婷狠狠综合| 久久99久久精品欧美| 亚洲色图在线视频| 欧美videos中文字幕| 色综合网站在线| 国产一区不卡在线| 亚洲影视资源网| 久久精品网站免费观看| 欧美色视频在线| 成人国产精品免费观看| 日韩精品一区第一页| 国产精品电影一区二区三区| 欧美成人性福生活免费看| 一本一道波多野结衣一区二区| 男人的j进女人的j一区| 一区二区三区久久| 国产色爱av资源综合区| 91精品国产一区二区三区香蕉| 99re热这里只有精品视频|