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

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

?? md5.c

?? 一個加密庫代碼
?? C
字號:
/*
 * Copyright 1997-2005 Markus Hahn 
 * 
 * Licensed under the Apache License, Version 2.0 (the "License"); 
 * you may not use this file except in compliance with the License. 
 * You may obtain a copy of the License at 
 * 
 *     http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */


#include "cpkernel.h"
#include "MD5.h"

#include <stdlib.h>
#include <memory.h>
#include <string.h>



// constants for MD5Transform routine.
#define S11  7
#define S12  12
#define S13  17
#define S14  22
#define S21  5
#define S22  9
#define S23  14
#define S24  20
#define S31  4
#define S32  11
#define S33  16
#define S34  23
#define S41  6
#define S42  10
#define S43  15
#define S44  21


// prototypes of the support routines
void _MD5_transform (WORD32[4], WORD8[64]);
void _MD5_encode (WORD8 *, WORD32*, WORD32);
void _MD5_decode (WORD32*, WORD8 *, WORD32);


// F, G, H and I are basic MD5 functions.
#define F(x, y, z) (((x) & (y)) | ((~x) & (z)))
#define G(x, y, z) (((x) & (z)) | ((y) & (~z)))
#define H(x, y, z) ((x) ^ (y) ^ (z))
#define I(x, y, z) ((y) ^ ((x) | (~z)))

// ROTATE_LEFT rotates x left n bits.
#define ROTATE_LEFT(x, n) (((x) << (n)) | ((x) >> (32-(n))))

// FF, GG, HH, and II transformations for rounds 1, 2, 3, and 4.
// Rotation is separate from addition to prevent recomputation.
#define FF(a, b, c, d, x, s, ac) {                  \
    (a) += F ((b), (c), (d)) + (x) + (WORD32)(ac);  \
    (a) = ROTATE_LEFT ((a), (s));                   \
    (a) += (b);                                     \
  }
#define GG(a, b, c, d, x, s, ac) {                  \
    (a) += G ((b), (c), (d)) + (x) + (WORD32)(ac);  \
    (a) = ROTATE_LEFT ((a), (s));                   \
    (a) += (b);                                     \
  }
#define HH(a, b, c, d, x, s, ac) {                  \
    (a) += H ((b), (c), (d)) + (x) + (WORD32)(ac);  \
    (a) = ROTATE_LEFT ((a), (s));                   \
    (a) += (b);                                     \
  }
#define II(a, b, c, d, x, s, ac) {                  \
    (a) += I ((b), (c), (d)) + (x) + (WORD32)(ac);  \
    (a) = ROTATE_LEFT ((a), (s));                   \
    (a) += (b);                                     \
  }



PMD5CTX CRYPTPAK_API MD5_Create() 
{
#ifdef KERNEL_COMPILE
	PMD5CTX pCtx = (PMD5CTX) ExAllocatePool( NonPagedPool,sizeof(MD5CTX) );
#else
	PMD5CTX pCtx = (PMD5CTX) malloc(sizeof(MD5CTX));
#endif

  MD5_Initialize(pCtx);

  return pCtx;
}


void CRYPTPAK_API MD5_Initialize
  (PMD5CTX pCtx) 
{
  MD5_Reset(pCtx);
}


void CRYPTPAK_API MD5_Reset
  (PMD5CTX pCtx) 
{
  pCtx->count[0] = pCtx->count[1] = 0;

  // load magic init. constants.
  pCtx->state[0] = 0x67452301;
  pCtx->state[1] = 0xefcdab89;
  pCtx->state[2] = 0x98badcfe;
  pCtx->state[3] = 0x10325476;
}


void CRYPTPAK_API MD5_Destroy
  (PMD5CTX pCtx) 
{
  memset(pCtx, 0, sizeof(MD5CTX));
#ifdef KERNEL_COMPILE
  ExFreePool( pCtx );
#else
  free(pCtx);
#endif

}



void CRYPTPAK_API MD5_Update
  (PMD5CTX pCtx, 
   const void* pData, 
   WORD32 lNumOfBytes) 
{
  WORD8* pInput = (WORD8*) pData;
  WORD32 lI, lIndex, lPartLen;

  // compute number of bytes mod 64
  lIndex = (WORD32)((pCtx->count[0] >> 3) & 0x3F);

  // update number of bits
  if ((pCtx->count[0] += ((WORD32)lNumOfBytes << 3)) < ((WORD32)lNumOfBytes << 3))
    pCtx->count[1]++;
  pCtx->count[1] += ((WORD32)lNumOfBytes >> 29);
  
  lPartLen = 64 - lIndex;
  
  // transform as many times as possible.
  if (lNumOfBytes >= lPartLen) 
  {
    memcpy(&pCtx->buffer[lIndex], pInput, lPartLen);
    _MD5_transform (pCtx->state, pCtx->buffer);

    for (lI = lPartLen; lI + 63 < lNumOfBytes; lI += 64)
      _MD5_transform (pCtx->state, &pInput[lI]);

    lIndex = 0;
  }
  else lI = 0;
  
  // buffer remaining input
  memcpy(&pCtx->buffer[lIndex], 
         &pInput[lI], 
         lNumOfBytes - lI);
}



void CRYPTPAK_API MD5_Final
  (WORD8* digest, 
   PMD5CTX pCtx ) 
{
  // to allow multithreading we have to locate the padding memory here
  WORD8 PADDING[64] = {
  0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  };

  WORD8 bits[8];
  WORD32 lIndex, lPadLen;

  // save number of bits
  _MD5_encode(bits, pCtx->count, 8);

  // pad out to 56 mod 64
  lIndex = (WORD32)((pCtx->count[0] >> 3) & 0x3f);
  lPadLen = (lIndex < 56) ? (56 - lIndex) : (120 - lIndex);
  MD5_Update(pCtx, PADDING, lPadLen);
  
  // append length (before padding)
  MD5_Update(pCtx, bits, 8);

  // store state in digest
  _MD5_encode(digest, pCtx->state, 16);
  
  // clear sensitive information.
  memset(pCtx, 0, sizeof(MD5CTX));
}




// the selftest strings and digests
static char* selfTestSource[3] = 
{
  "hellooo nurse!",
  "whoa nelly, says Sherman, the Shark",
  "01234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
};


static WORD8 selfTestDigest[3][MD5_DIGESTSIZE] = 
{ 
  { 0x13, 0x12, 0x04, 0x84, 0x56, 0x62, 0x22, 0xdf,
    0xcf, 0xac, 0x4f, 0xd4, 0x1e, 0x78, 0x18, 0x90 },
    
  { 0x1f, 0x6a, 0x8e, 0x65, 0xba, 0x18, 0xb7, 0x74,
    0xc0, 0xc1, 0xed, 0xcb, 0xe6, 0x29, 0xb4, 0x95 },

  { 0x9c, 0xdc, 0xa7, 0xfa, 0x46, 0xc7, 0xc7, 0x1a,
    0x5c, 0xfe, 0xd3, 0xbc, 0x99, 0x9e, 0x2f, 0x91 }
};



BYTEBOOL CRYPTPAK_API MD5_SelfTest() 
{
    int nI;
    PMD5CTX pCtx;
    WORD8 actDigest[MD5_DIGESTSIZE];

    // run tests
    for (nI = 0; nI < 3; nI++) 
    {
      pCtx = MD5_Create();
      MD5_Update(pCtx, selfTestSource[nI], (WORD32)strlen(selfTestSource[nI]));
      MD5_Final(actDigest, pCtx);
      MD5_Destroy(pCtx);

      if (0 != memcmp(&selfTestDigest[nI][0], actDigest, MD5_DIGESTSIZE))
        return BOOL_FALSE;
    }

    // all tests passed 
    return BOOL_TRUE;
}





// basic transformation, transforms state based on block.
void _MD5_transform 
  (WORD32 state[4], 
   WORD8 block[64]) 
{

  WORD32 lA = state[0], lB = state[1], lC = state[2], lD = state[3];
  WORD32 x[16];
  
  _MD5_decode (x, block, 64);

  // round 1 
  FF ( lA, lB, lC, lD, x[ 0], S11, 0xd76aa478); // 1 
  FF ( lD, lA, lB, lC, x[ 1], S12, 0xe8c7b756); // 2 
  FF ( lC, lD, lA, lB, x[ 2], S13, 0x242070db); // 3 
  FF ( lB, lC, lD, lA, x[ 3], S14, 0xc1bdceee); // 4 
  FF ( lA, lB, lC, lD, x[ 4], S11, 0xf57c0faf); // 5 
  FF ( lD, lA, lB, lC, x[ 5], S12, 0x4787c62a); // 6 
  FF ( lC, lD, lA, lB, x[ 6], S13, 0xa8304613); // 7 
  FF ( lB, lC, lD, lA, x[ 7], S14, 0xfd469501); // 8 
  FF ( lA, lB, lC, lD, x[ 8], S11, 0x698098d8); // 9 
  FF ( lD, lA, lB, lC, x[ 9], S12, 0x8b44f7af); // 10 
  FF ( lC, lD, lA, lB, x[10], S13, 0xffff5bb1); // 11 
  FF ( lB, lC, lD, lA, x[11], S14, 0x895cd7be); // 12 
  FF ( lA, lB, lC, lD, x[12], S11, 0x6b901122); // 13 
  FF ( lD, lA, lB, lC, x[13], S12, 0xfd987193); // 14 
  FF ( lC, lD, lA, lB, x[14], S13, 0xa679438e); // 15 
  FF ( lB, lC, lD, lA, x[15], S14, 0x49b40821); // 16 

  // round 2 
  GG ( lA, lB, lC, lD, x[ 1], S21, 0xf61e2562); // 17 
  GG ( lD, lA, lB, lC, x[ 6], S22, 0xc040b340); // 18 
  GG ( lC, lD, lA, lB, x[11], S23, 0x265e5a51); // 19 
  GG ( lB, lC, lD, lA, x[ 0], S24, 0xe9b6c7aa); // 20 
  GG ( lA, lB, lC, lD, x[ 5], S21, 0xd62f105d); // 21 
  GG ( lD, lA, lB, lC, x[10], S22,  0x2441453); // 22 
  GG ( lC, lD, lA, lB, x[15], S23, 0xd8a1e681); // 23 
  GG ( lB, lC, lD, lA, x[ 4], S24, 0xe7d3fbc8); // 24 
  GG ( lA, lB, lC, lD, x[ 9], S21, 0x21e1cde6); // 25 
  GG ( lD, lA, lB, lC, x[14], S22, 0xc33707d6); // 26 
  GG ( lC, lD, lA, lB, x[ 3], S23, 0xf4d50d87); // 27 
  GG ( lB, lC, lD, lA, x[ 8], S24, 0x455a14ed); // 28 
  GG ( lA, lB, lC, lD, x[13], S21, 0xa9e3e905); // 29 
  GG ( lD, lA, lB, lC, x[ 2], S22, 0xfcefa3f8); // 30 
  GG ( lC, lD, lA, lB, x[ 7], S23, 0x676f02d9); // 31 
  GG ( lB, lC, lD, lA, x[12], S24, 0x8d2a4c8a); // 32 

  // round 3 
  HH ( lA, lB, lC, lD, x[ 5], S31, 0xfffa3942); // 33 
  HH ( lD, lA, lB, lC, x[ 8], S32, 0x8771f681); // 34 
  HH ( lC, lD, lA, lB, x[11], S33, 0x6d9d6122); // 35 
  HH ( lB, lC, lD, lA, x[14], S34, 0xfde5380c); // 36 
  HH ( lA, lB, lC, lD, x[ 1], S31, 0xa4beea44); // 37 
  HH ( lD, lA, lB, lC, x[ 4], S32, 0x4bdecfa9); // 38 
  HH ( lC, lD, lA, lB, x[ 7], S33, 0xf6bb4b60); // 39 
  HH ( lB, lC, lD, lA, x[10], S34, 0xbebfbc70); // 40 
  HH ( lA, lB, lC, lD, x[13], S31, 0x289b7ec6); // 41 
  HH ( lD, lA, lB, lC, x[ 0], S32, 0xeaa127fa); // 42 
  HH ( lC, lD, lA, lB, x[ 3], S33, 0xd4ef3085); // 43 
  HH ( lB, lC, lD, lA, x[ 6], S34,  0x4881d05); // 44 
  HH ( lA, lB, lC, lD, x[ 9], S31, 0xd9d4d039); // 45 
  HH ( lD, lA, lB, lC, x[12], S32, 0xe6db99e5); // 46 
  HH ( lC, lD, lA, lB, x[15], S33, 0x1fa27cf8); // 47 
  HH ( lB, lC, lD, lA, x[ 2], S34, 0xc4ac5665); // 48 

  // round 4 
  II ( lA, lB, lC, lD, x[ 0], S41, 0xf4292244); // 49 
  II ( lD, lA, lB, lC, x[ 7], S42, 0x432aff97); // 50 
  II ( lC, lD, lA, lB, x[14], S43, 0xab9423a7); // 51 
  II ( lB, lC, lD, lA, x[ 5], S44, 0xfc93a039); // 52 
  II ( lA, lB, lC, lD, x[12], S41, 0x655b59c3); // 53 
  II ( lD, lA, lB, lC, x[ 3], S42, 0x8f0ccc92); // 54 
  II ( lC, lD, lA, lB, x[10], S43, 0xffeff47d); // 55 
  II ( lB, lC, lD, lA, x[ 1], S44, 0x85845dd1); // 56 
  II ( lA, lB, lC, lD, x[ 8], S41, 0x6fa87e4f); // 57 
  II ( lD, lA, lB, lC, x[15], S42, 0xfe2ce6e0); // 58 
  II ( lC, lD, lA, lB, x[ 6], S43, 0xa3014314); // 59 
  II ( lB, lC, lD, lA, x[13], S44, 0x4e0811a1); // 60 
  II ( lA, lB, lC, lD, x[ 4], S41, 0xf7537e82); // 61 
  II ( lD, lA, lB, lC, x[11], S42, 0xbd3af235); // 62 
  II ( lC, lD, lA, lB, x[ 2], S43, 0x2ad7d2bb); // 63 
  II ( lB, lC, lD, lA, x[ 9], S44, 0xeb86d391); // 64 

  state[0] += lA;
  state[1] += lB;
  state[2] += lC;
  state[3] += lD;
  
  // lClear sensitive information
  memset(x, 0, 16);
}


// encodes input (WORD32) into output (WORD8), 
// assumes that lLen is a multiple of 4
void _MD5_encode 
  (WORD8* pOutput, 
   WORD32* pInput, 
   WORD32 lLen) 
{
  WORD32 lI, lJ;

  for (lI = 0, lJ = 0; lJ < lLen; lI++, lJ += 4) 
  {
    pOutput[lJ]     = (WORD8)(pInput[lI] & 0x0ff);
    pOutput[lJ + 1] = (WORD8)((pInput[lI] >> 8) & 0x0ff);
    pOutput[lJ + 2] = (WORD8)((pInput[lI] >> 16) & 0x0ff);
    pOutput[lJ + 3] = (WORD8)((pInput[lI] >> 24) & 0x0ff);
  }
}


// encodes input (WORD8) into output (WORD32),
// assumes that lLen is a multiple of 4.
void _MD5_decode 
  (WORD32* pOutput, 
   WORD8* pInput, 
   WORD32 lLen) 
{
  WORD32 lI, lJ;

  for (lI = 0, lJ = 0; lJ < lLen; lI++, lJ += 4)
    pOutput[lI] = ((WORD32)pInput[lJ]) |
                 (((WORD32)pInput[lJ + 1]) << 8) |
                 (((WORD32)pInput[lJ + 2]) << 16) |
                 (((WORD32)pInput[lJ + 3]) << 24);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
狠狠色伊人亚洲综合成人| 色哟哟一区二区在线观看| 高清在线成人网| 91福利社在线观看| 久久久精品2019中文字幕之3| 亚洲一二三区不卡| 成人黄色在线看| 欧美精品一区二区精品网| 午夜国产精品一区| 日本高清不卡视频| 国产精品午夜在线观看| 激情丁香综合五月| 日韩视频一区二区三区在线播放| 亚洲一线二线三线久久久| 国产成人亚洲综合a∨婷婷| 欧美一级欧美三级| 亚洲五码中文字幕| 欧美午夜精品久久久| 国产精品免费视频一区| 国产精品夜夜嗨| 午夜久久久久久| 色哟哟精品一区| 亚洲欧美日韩国产综合| 成人在线视频一区二区| 久久精品夜色噜噜亚洲a∨| 激情深爱一区二区| 欧美成人午夜电影| 国模一区二区三区白浆| 日韩欧美电影一二三| 毛片不卡一区二区| 日韩欧美你懂的| 奇米影视一区二区三区| 91精品欧美综合在线观看最新| 亚洲h在线观看| 欧美精品乱码久久久久久| 亚洲最大成人网4388xx| 在线观看一区日韩| 香蕉久久一区二区不卡无毒影院 | 亚洲综合男人的天堂| 91美女视频网站| 亚洲一区国产视频| 欧美日本在线播放| 欧美a级一区二区| 久久人人97超碰com| 福利一区福利二区| 亚洲一区免费观看| 91精品婷婷国产综合久久| 狠狠色狠狠色综合系列| 中文字幕乱码日本亚洲一区二区| 成人h动漫精品| 一区二区三区小说| 91麻豆精品91久久久久久清纯| 蜜桃一区二区三区在线| 久久综合九色综合97婷婷| 国产成人综合在线观看| 亚洲男人的天堂在线aⅴ视频| 欧美性一二三区| 美国精品在线观看| 看片的网站亚洲| 久久久久97国产精华液好用吗| 成人黄色电影在线 | 久久这里只有精品6| 成人精品电影在线观看| 一区二区三区国产豹纹内裤在线| 在线播放日韩导航| 国产精品 欧美精品| 亚洲电影第三页| 国产无一区二区| 欧美日韩视频在线观看一区二区三区 | 亚洲成av人影院在线观看网| 欧美tickling挠脚心丨vk| 91在线免费播放| 日产精品久久久久久久性色 | 欧美大片免费久久精品三p | 久久99热国产| 一区二区免费在线| 久久精品人人做| 欧美日韩亚洲国产综合| 成人性生交大片免费看中文网站| 午夜精品一区二区三区电影天堂| 欧美激情自拍偷拍| 日韩一级高清毛片| 色婷婷久久久综合中文字幕| 狠狠色狠狠色综合系列| 亚洲超碰精品一区二区| 亚洲日本欧美天堂| 久久日韩粉嫩一区二区三区| 91麻豆精品国产91久久久| 99免费精品在线观看| 激情综合色播激情啊| 亚洲在线成人精品| 国产精品美女久久久久久久久| 日韩欧美一区二区免费| 欧美日韩国产色站一区二区三区| proumb性欧美在线观看| 国产美女娇喘av呻吟久久| 日韩电影在线一区二区三区| 一区二区高清在线| 中文字幕第一区二区| 2023国产精品自拍| 欧美成人性福生活免费看| 欧美老人xxxx18| 欧美日韩激情一区二区| 欧美网站一区二区| 欧美在线视频不卡| 色国产精品一区在线观看| 99久久精品免费看国产| 国产宾馆实践打屁股91| 国产麻豆一精品一av一免费| 理论电影国产精品| 另类综合日韩欧美亚洲| 免费看日韩a级影片| 五月天亚洲婷婷| 日韩高清一级片| 男人的j进女人的j一区| 日本视频在线一区| 久久国产尿小便嘘嘘| 国产曰批免费观看久久久| 黄色成人免费在线| 国产精品一区二区久久精品爱涩| 免费日本视频一区| 国产在线精品视频| 国产精品99久久久| 成人久久视频在线观看| 91丨国产丨九色丨pron| 色婷婷综合久久久久中文 | 三级成人在线视频| 免费国产亚洲视频| 国产一区不卡视频| 成人av综合一区| 欧美日韩一区在线| 欧美一区二区三区在线看| 日韩限制级电影在线观看| 久久夜色精品国产欧美乱极品| 国产女人18水真多18精品一级做| 国产一区二区精品在线观看| 国产一区欧美一区| 97精品久久久午夜一区二区三区 | 日韩一区二区电影网| 精品乱人伦小说| 亚洲人成小说网站色在线| 亚洲v中文字幕| 国产精品中文有码| 在线免费亚洲电影| 日韩天堂在线观看| 一区在线观看视频| 人人爽香蕉精品| av亚洲精华国产精华| 欧美色区777第一页| 久久色视频免费观看| 亚洲欧美一区二区三区孕妇| 美脚の诱脚舐め脚责91| jiyouzz国产精品久久| 91精品国产手机| 国产欧美日韩另类一区| 性久久久久久久| av午夜一区麻豆| www日韩大片| 性久久久久久久久久久久| 丰满放荡岳乱妇91ww| 欧美高清视频一二三区| 国产精品美女久久久久久久| 美女久久久精品| 欧美日韩在线三区| 国产精品亲子乱子伦xxxx裸| 日韩av电影天堂| 在线精品亚洲一区二区不卡| 精品国产91乱码一区二区三区| 一区二区三区在线高清| 成人免费视频视频在线观看免费| 91精品国产91综合久久蜜臀| 亚洲色图都市小说| 国产一区二区三区视频在线播放| 欧美日韩一区二区在线视频| 国产精品福利电影一区二区三区四区| 日韩高清在线一区| 欧美色综合天天久久综合精品| 国产精品美日韩| 国产在线观看一区二区| 日韩色在线观看| 香蕉影视欧美成人| 欧美中文字幕亚洲一区二区va在线| 国产精品全国免费观看高清| 国产精品69毛片高清亚洲| 91精品国产高清一区二区三区蜜臀 | 丝袜美腿成人在线| 欧美做爰猛烈大尺度电影无法无天| 国产色一区二区| 国产成人一区在线| 2024国产精品视频| 国产麻豆9l精品三级站| 亚洲精品一区二区三区精华液| 日产欧产美韩系列久久99| 欧美日韩电影在线播放| 亚洲自拍偷拍欧美| 在线精品视频免费播放| 一区二区三区四区在线播放| 日本精品免费观看高清观看| 亚洲综合激情小说| 在线观看视频一区二区 |