青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

Prayer

在一般中尋求卓越
posts - 1256, comments - 190, trackbacks - 0, articles - 0
  C++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

md5的實現(xiàn)

Posted on 2010-10-09 16:44 Prayer 閱讀(643) 評論(0)  編輯 收藏 引用 所屬分類: 算法
 具體的一個MD5實現(xiàn)
  /*
  * md5 -- compute and check MD5 message digest.
  * this version only can calculate the char string.
  *
  * MD5 (Message-Digest algorithm 5) is a widely used, partially
  * insecure cryptographic hash function with a 128-bit hash value.
  *
  * Author: redraiment
  * Date: Aug 27, 2008
  * Version: 0.1.6
  */
  #include <stdlib.h>
  #include <string.h>
  #include <stdio.h>
  #include <math.h>
  #define SINGLE_ONE_BIT 0x80
  #define BLOCK_SIZE 512
  #define MOD_SIZE 448
  #define APP_SIZE 64
  #define BITS 8
  // MD5 Chaining Variable
  #define A 0x67452301UL
  #define B 0xEFCDAB89UL
  #define C 0x98BADCFEUL
  #define D 0x10325476UL
  // Creating own types
  #ifdef UINT64
  # undef UINT64
  #endif
  #ifdef UINT32
  # undef UINT32
  #endif
  typedef unsigned long long UINT64;
  typedef unsigned long UINT32;
  typedef unsigned char UINT8;
  typedef struct
  {
  char * message;
  UINT64 length;
  }STRING;
  const UINT32 X[4][2] = {{0, 1}, {1, 5}, {5, 3}, {0, 7}};
  // Constants for MD5 transform routine.
  const UINT32 S[4][4] = {
  { 7, 12, 17, 22 },
  { 5, 9, 14, 20 },
  { 4, 11, 16, 23 },
  { 6, 10, 15, 21 }
  };
  // F, G, H and I are basic MD5 functions.
  UINT32 F( UINT32 X, UINT32 Y, UINT32 Z )
  {
  return ( X & Y ) | ( ~X & Z );
  }
  UINT32 G( UINT32 X, UINT32 Y, UINT32 Z )
  {
  return ( X & Z ) | ( Y & ~Z );
  }
  UINT32 H( UINT32 X, UINT32 Y, UINT32 Z )
  {
  return X ^ Y ^ Z;
  }
  UINT32 I( UINT32 X, UINT32 Y, UINT32 Z )
  {
  return Y ^ ( X | ~Z );
  }
  // rotates x left s bits.
  UINT32 rotate_left( UINT32 x, UINT32 s )
  {
  return ( x << s ) | ( x >> ( 32 - s ) );
  }
  // Pre-processin
  UINT32 count_padding_bits ( UINT32 length )
  {
  UINT32 div = length * BITS / BLOCK_SIZE;
  UINT32 mod = length * BITS % BLOCK_SIZE;
  UINT32 c_bits;
  if ( mod == 0 )
  c_bits = MOD_SIZE;
  else
  c_bits = ( MOD_SIZE + BLOCK_SIZE - mod ) % BLOCK_SIZE;
  return c_bits / BITS;
  }
  STRING append_padding_bits ( char * argv )
  {
  UINT32 msg_length = strlen ( argv );
  UINT32 bit_length = count_padding_bits ( msg_length );
  UINT64 app_length = msg_length * BITS;
  STRING string;
  string.message = (char *)malloc(msg_length + bit_length + APP_SIZE / BITS);
  // Save message
  strncpy ( string.message, argv, msg_length );
  // Pad out to mod 64.
  memset ( string.message + msg_length, 0, bit_length );
  string.message [ msg_length ] = SINGLE_ONE_BIT;
  // Append length (before padding).
  memmove ( string.message + msg_length + bit_length, (char *)&app_length, sizeof( UINT64 ) );
  string.length = msg_length + bit_length + sizeof( UINT64 );
  return string;
  }
  int main ( int argc, char *argv[] )
  {
  STRING string;
  UINT32 w[16];
  UINT32 chain[4];
  UINT32 state[4];
  UINT8 r[16];
  UINT32 ( *auxi[ 4 ])( UINT32, UINT32, UINT32 ) = { F, G, H, I };
  int roundIdx;
  int argIdx;
  int sIdx;
  int wIdx;
  int i;
  int j;
  if ( argc < 2 )
  {
  fprintf ( stderr, "usage: %s string ...\n", argv[ 0 ] );
  return EXIT_FAILURE;
  }
  for ( argIdx = 1; argIdx < argc; argIdx++ )
  {
  string = append_padding_bits ( argv[ argIdx ] );
  // MD5 initialization.
  chain[0] = A;
  chain[1] = B;
  chain[2] = C;
  chain[3] = D;
  for ( j = 0; j < string.length; j += BLOCK_SIZE / BITS)
  {
  memmove ( (char *)w, string.message + j, BLOCK_SIZE / BITS );
  memmove ( state, chain, sizeof(chain) );
  for ( roundIdx = 0; roundIdx < 4; roundIdx++ )
  {
  wIdx = X[ roundIdx ][ 0 ];
  sIdx = 0;
  for ( i = 0; i < 16; i++ )
  {
  // FF, GG, HH, and II transformations for rounds 1, 2, 3, and 4.
  // Rotation is separate from addition to prevent recomputation.
  state[sIdx] = state [ (sIdx + 1) % 4 ] +
  rotate_left ( state[sIdx] +
  ( *auxi[ roundIdx ] )
  ( state[(sIdx+1) % 4], state[(sIdx+2) % 4], state[(sIdx+3) % 4]) +
  w[ wIdx ] +
  (UINT32)floor( (1ULL << 32) * fabs(sin( roundIdx * 16 + i + 1 )) ),
  S[ roundIdx ][ i % 4 ]);
  sIdx = ( sIdx + 3 ) % 4;
  wIdx = ( wIdx + X[ roundIdx ][ 1 ] ) & 0xF;
  }
  }
  chain[ 0 ] += state[ 0 ];
  chain[ 1 ] += state[ 1 ];
  chain[ 2 ] += state[ 2 ];
  chain[ 3 ] += state[ 3 ];
  }
  memmove ( r + 0, (char *)&chain[0], sizeof(UINT32) );
  memmove ( r + 4, (char *)&chain[1], sizeof(UINT32) );
  memmove ( r + 8, (char *)&chain[2], sizeof(UINT32) );
  memmove ( r + 12, (char *)&chain[3], sizeof(UINT32) );
  for ( i = 0; i < 16; i++ )
  printf ( "%02x", r[i] );
  putchar ( '\n' );
  }
  return EXIT_SUCCESS;
  }
  /* 以上程序可以在任意一款支持ANSI C的編譯器上編譯通過 */
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美系列亚洲系列| 亚洲国产成人91精品| 亚洲欧美文学| 夜夜精品视频一区二区| 日韩西西人体444www| 亚洲最新在线| 亚洲高清成人| 一区二区三区在线免费播放| 韩日成人av| 亚洲精品乱码久久久久久日本蜜臀 | 宅男噜噜噜66一区二区| 亚洲视频在线二区| 欧美一级淫片aaaaaaa视频| 久久久久久香蕉网| 欧美巨乳在线| 国产欧美在线| 一区二区福利| 久久久999精品| 亚洲精品免费电影| 亚洲一区亚洲| 欧美11—12娇小xxxx| 国产精品日韩欧美一区二区| 亚洲激情自拍| 久久免费高清| 亚洲少妇诱惑| 欧美精品一区二区精品网 | 亚洲欧美日韩专区| 欧美成人国产一区二区| 国产婷婷精品| 亚洲无线视频| 欧美激情一二三区| 欧美亚洲一区| 国产精品www色诱视频| 亚洲精品国产精品乱码不99按摩| 久久久www成人免费无遮挡大片| 亚洲欧洲偷拍精品| 噜噜噜噜噜久久久久久91| 国产视频在线观看一区 | 亚洲国产日韩一区| 久久经典综合| 欧美日韩中文在线| 亚洲高清免费| 牛人盗摄一区二区三区视频| 欧美一区二区高清| 国产色婷婷国产综合在线理论片a| 亚洲午夜羞羞片| 亚洲理论电影网| 嫩草成人www欧美| 亚洲盗摄视频| 欧美激情中文字幕乱码免费| 久久精品av麻豆的观看方式| 国产亚洲一级高清| 久久国产精品毛片| 午夜精品久久久久久99热| 国产精品久久7| 亚洲欧美中日韩| 亚洲一区二区免费看| 国产精品久久午夜| 欧美一区二区三区在线免费观看| 亚洲在线一区二区| 国产精品综合| 久久久久国产一区二区三区| 久久久久久久久久看片| 亚洲国产成人porn| 99国内精品久久| 国产精品免费一区豆花| 欧美在线播放一区| 久久久久久久久久久久久9999| 伊人精品成人久久综合软件| 欧美成人首页| 欧美久久精品午夜青青大伊人| 9人人澡人人爽人人精品| 一区二区高清视频| 国产一区二区三区日韩欧美| 美日韩精品免费| 欧美大尺度在线| 国产精品99久久99久久久二8 | 欧美岛国在线观看| 欧美成人r级一区二区三区| 一区二区三区国产精华| 亚洲一区二区免费在线| 国外成人网址| 亚洲人在线视频| 国产精品爱啪在线线免费观看| 欧美在线视频一区| 欧美成va人片在线观看| 亚洲欧美日本日韩| 久久久久久电影| 一区二区三区欧美| 欧美在线视频不卡| 亚洲视频专区在线| 久久久久久久综合日本| 这里只有精品电影| 午夜在线播放视频欧美| 亚洲级视频在线观看免费1级| 亚洲免费观看在线观看| 国产亚洲精品一区二555| 欧美国产一区二区| 国产精品区一区二区三区| 女仆av观看一区| 欧美午夜精品理论片a级按摩| 久久国产色av| 欧美精品日韩精品| 久久亚洲美女| 欧美午夜在线一二页| 麻豆精品在线视频| 国产精品久久久久久久久借妻 | 亚洲精品视频一区二区三区| 一区二区激情| 亚洲国产天堂久久国产91| 亚洲午夜在线| 一区二区日韩| 老鸭窝91久久精品色噜噜导演| 亚洲专区在线| 欧美精品一区二区久久婷婷| 久久一本综合频道| 国产精品一区久久久| 日韩天堂在线观看| 亚洲日本视频| 久久久久久一区| 久久手机精品视频| 国产亚洲精品久久久久婷婷瑜伽| 一区二区不卡在线视频 午夜欧美不卡在 | 久久成人精品无人区| 欧美日韩高清在线观看| 巨胸喷奶水www久久久免费动漫| 国产精品久久久久999| 亚洲免费电影在线观看| 亚洲精品一区在线| 麻豆精品国产91久久久久久| 久久男人资源视频| 国产一区二区三区不卡在线观看| 中文国产成人精品久久一| 一区二区激情| 欧美日韩综合不卡| 一本久久a久久精品亚洲| 中国成人亚色综合网站| 欧美日韩国产a| 夜夜嗨av一区二区三区网站四季av| 亚洲精品中文字幕在线观看| 欧美波霸影院| 亚洲美女黄色| 性久久久久久久久久久久| 国产精品视频观看| 香蕉久久夜色精品国产| 久久免费少妇高潮久久精品99| 韩国美女久久| 牛夜精品久久久久久久99黑人| 亚洲第一毛片| 亚洲视频一二区| 国产欧美日韩视频| 久久精品主播| 亚洲激情在线观看视频免费| 一区二区欧美激情| 国产情侣久久| 六月婷婷一区| 中文欧美日韩| 免费成人黄色| 亚洲视频www| 国产亚洲视频在线| 欧美成人自拍视频| 亚洲影院免费| 欧美一区二区在线看| 亚洲福利视频免费观看| 欧美日本中文字幕| 午夜精品三级视频福利| 久久综合网色—综合色88| 亚洲人成在线观看一区二区| 欧美三级网页| 久久精品视频在线看| 日韩午夜剧场| 免费短视频成人日韩| 亚洲午夜免费视频| 狠狠色丁香婷婷综合| 欧美日本亚洲韩国国产| 午夜精品久久久久久久男人的天堂 | 亚洲黄色三级| 亚洲欧美影院| 国产精品v欧美精品∨日韩| 久久成人18免费网站| 亚洲国产精品一区二区第一页| 亚洲欧美日韩精品久久久| 亚洲第一页在线| 国产女主播一区二区三区| 欧美3dxxxxhd| 欧美一区二区高清在线观看| 99精品国产热久久91蜜凸| 裸体歌舞表演一区二区| 亚洲欧美日韩国产一区二区| 亚洲欧洲精品天堂一级| 国产又爽又黄的激情精品视频| 欧美理论在线播放| 久久久亚洲综合| 亚洲欧洲99久久| 亚洲图片欧美一区| 亚洲国产裸拍裸体视频在线观看乱了| 欧美一区二区三区电影在线观看| 日韩一级黄色片| 亚洲黄色影片| 亚洲国产精品悠悠久久琪琪|