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

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

?? rsakey.cpp

?? rsa算法的c++實現,該程序實現rsa密鑰對的生成.此密鑰用來加密和解密
?? 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





?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色噜噜狠狠成人中文综合| 一二三区精品福利视频| 日本女优在线视频一区二区| 91网页版在线| 国产日韩欧美a| 久久精品国产成人一区二区三区 | 精品88久久久久88久久久| 亚洲va欧美va国产va天堂影院| 色哟哟一区二区三区| 亚洲你懂的在线视频| 不卡免费追剧大全电视剧网站| 国产色婷婷亚洲99精品小说| 国产一区二区三区不卡在线观看| 日韩精品专区在线影院重磅| 天天影视涩香欲综合网| 51精品久久久久久久蜜臀| 亚洲大片精品永久免费| 7777精品久久久大香线蕉 | 成人av电影在线播放| 中文字幕欧美日本乱码一线二线 | 日韩美一区二区三区| 91浏览器打开| 一区二区在线免费观看| 色婷婷久久久亚洲一区二区三区| 亚洲黄色片在线观看| 91极品美女在线| 男女男精品视频| 91精品国产综合久久福利| 免费成人在线观看| 国产视频一区在线观看| 国产一区二区在线影院| 中文字幕中文字幕一区| 欧美优质美女网站| 美国十次了思思久久精品导航| 精品少妇一区二区三区在线播放| 国产做a爰片久久毛片| 国产精品久久久久久久蜜臀| 国产福利一区二区| 亚洲一区二区三区小说| 欧美一区二区三区不卡| 国产盗摄女厕一区二区三区| 国产色婷婷亚洲99精品小说| 91丨九色丨蝌蚪丨老版| 三级在线观看一区二区| 欧美精品日韩一本| 国产98色在线|日韩| 亚洲欧美激情视频在线观看一区二区三区 | 一区二区三区四区五区视频在线观看| 欧美色网一区二区| 麻豆久久一区二区| 26uuu精品一区二区三区四区在线| 福利一区二区在线| 亚洲一区二区在线播放相泽| 欧美亚洲禁片免费| 国产不卡视频在线播放| 亚洲激情第一区| 欧美日韩不卡一区| 成人国产免费视频| 日本不卡免费在线视频| 17c精品麻豆一区二区免费| 在线亚洲免费视频| 国产精品996| 免费在线观看一区| 亚洲乱码国产乱码精品精98午夜| 精品久久国产字幕高潮| 91蝌蚪国产九色| 国产.欧美.日韩| 久久精品久久99精品久久| 一区二区在线看| 中日韩av电影| 日韩精品一区二区三区蜜臀| 欧美日韩一二三| 欧美亚洲高清一区二区三区不卡| 色悠悠亚洲一区二区| 色综合一个色综合亚洲| 一本大道综合伊人精品热热| 99在线精品一区二区三区| 成人天堂资源www在线| 国产69精品久久777的优势| 懂色av一区二区三区免费看| 丁香天五香天堂综合| 高清日韩电视剧大全免费| 不卡一区在线观看| 日本道在线观看一区二区| 91福利视频在线| 欧美日韩国产一级片| 欧美精品一二三| 日韩免费成人网| 国产午夜精品一区二区三区嫩草| 国产欧美视频一区二区三区| 国产精品国模大尺度视频| 久久www免费人成看片高清| 精品亚洲成a人在线观看| 国产一区日韩二区欧美三区| 粉嫩av一区二区三区在线播放| 丰满少妇在线播放bd日韩电影| 99免费精品视频| 欧美日韩一区中文字幕| 日韩色视频在线观看| 国产亚洲精品bt天堂精选| 亚洲人成网站色在线观看| 亚洲国产成人va在线观看天堂| 日日夜夜免费精品视频| 国产麻豆精品theporn| caoporm超碰国产精品| 欧美精品在欧美一区二区少妇| 日韩亚洲欧美成人一区| 中文字幕成人av| 亚洲一本大道在线| 狠狠色狠狠色合久久伊人| 91在线你懂得| 91麻豆精品国产91久久久久| 久久久久国产成人精品亚洲午夜| 国产精品电影一区二区三区| 亚洲国产精品久久久久婷婷884| 激情都市一区二区| eeuss鲁片一区二区三区 | 欧美日韩高清一区二区三区| 久久天堂av综合合色蜜桃网| 亚洲女人的天堂| 久久66热偷产精品| 色婷婷精品久久二区二区蜜臂av | 蜜臀精品一区二区三区在线观看 | 国产亚洲va综合人人澡精品| 亚洲精品国产成人久久av盗摄| 日本不卡在线视频| 99久久精品情趣| 欧美精品一区在线观看| 亚洲综合激情另类小说区| 国产成人在线看| 欧美一级午夜免费电影| 亚洲丝袜美腿综合| 国产一区二区三区观看| 欧美猛男gaygay网站| 中文字幕日本不卡| 国产自产2019最新不卡| 欧美吞精做爰啪啪高潮| 国产精品乱人伦| 久久99日本精品| 欧美日韩亚洲丝袜制服| 中文字幕一区在线观看视频| 国产中文字幕精品| 在线电影院国产精品| 一区二区三区色| 91亚洲精品久久久蜜桃网站 | 国产91精品免费| 日韩一级黄色片| 亚洲一区二区五区| 91性感美女视频| 久久先锋资源网| 视频一区视频二区在线观看| 91丨九色丨蝌蚪富婆spa| 国产日本一区二区| 久久精品国产成人一区二区三区| 欧美日韩在线综合| 亚洲愉拍自拍另类高清精品| 99国产麻豆精品| 国产欧美精品在线观看| 国产精品一卡二卡在线观看| 精品日韩一区二区三区免费视频| 三级亚洲高清视频| 欧美精品乱人伦久久久久久| 无吗不卡中文字幕| 欧美少妇xxx| 天天影视网天天综合色在线播放| 欧美日韩另类一区| 日韩中文字幕1| 日韩一级二级三级精品视频| 日本三级亚洲精品| 日韩欧美在线影院| 精品一区二区三区不卡| 精品久久一二三区| 久久精品国产精品亚洲精品| 日韩精品一区二区三区视频播放 | 国产精品一区二区三区99| 精品国精品自拍自在线| 国产在线播精品第三| 久久久精品影视| 国产91精品一区二区麻豆亚洲| 欧美激情一区二区三区不卡| 成人久久视频在线观看| 中文字幕一区二区视频| 日本二三区不卡| 日韩国产欧美在线观看| 欧美成人精品高清在线播放 | 偷窥国产亚洲免费视频| 欧美精品在线观看播放| 久久精品久久综合| 国产女人18毛片水真多成人如厕| 99在线精品视频| 午夜视频一区二区三区| 欧美不卡激情三级在线观看| 国产精品123| 亚洲精品国产成人久久av盗摄 | 精品一区二区影视| 久久精品免费在线观看| 99久久精品久久久久久清纯| 亚洲一级二级三级| 精品久久国产97色综合| 99精品视频在线观看免费|