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

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>
            蜜臀99久久精品久久久久久软件| 在线视频欧美一区| 美女主播精品视频一二三四| 久久久久久久久久看片| 亚洲激情综合| 亚洲特黄一级片| 久久久综合精品| 欧美理论在线播放| 一区在线免费| 亚洲国产一区二区精品专区| 先锋亚洲精品| 亚洲久久一区| 免费久久精品视频| 国产一区二区三区观看| 9l视频自拍蝌蚪9l视频成人| 欧美aⅴ一区二区三区视频| 午夜视频在线观看一区二区| 欧美精品www在线观看| 一区二区三区在线观看欧美| 国产一区二区三区丝袜| 亚洲视频你懂的| 亚洲国产精品一区二区www在线| 欧美电影在线观看完整版| 亚洲美女啪啪| 久久久久久久999| 蜜桃av久久久亚洲精品| 午夜精品短视频| 国产精品一二三四| 欧美日韩1区2区| 久久久精品性| 国产亚洲女人久久久久毛片| 亚洲女人天堂成人av在线| 亚洲精品欧美极品| 欧美精品二区三区四区免费看视频| 精品999在线观看| 亚洲人成人一区二区在线观看| 欧美国产日韩精品| 久久一区免费| 狠狠v欧美v日韩v亚洲ⅴ| 久久精品视频免费| 午夜精品久久久久久久99水蜜桃| 国产精品视频免费观看www| 欧美一区二区视频97| 亚洲午夜激情免费视频| 亚洲欧美国产精品桃花| 国产精品wwwwww| 午夜精品久久久久| 久久精品动漫| 亚洲精品网址在线观看| 亚洲精品乱码久久久久久按摩观| 欧美精品自拍| 亚洲欧美精品| 欧美一区二视频| 亚洲国产欧美日韩精品| 亚洲人永久免费| 一区二区三区蜜桃网| 亚洲国产高清在线| 欧美日韩天天操| 亚洲欧美中文另类| 久久久福利视频| 亚洲人成在线观看网站高清| 日韩视频一区二区三区在线播放| 欧美日韩国产丝袜另类| 欧美一区二区三区视频| 久久亚洲综合色| 国产毛片精品视频| 久久精品99国产精品日本| 亚洲欧美在线看| 亚洲精品欧美| 一区二区三区精品| 永久91嫩草亚洲精品人人| 亚洲国产精品第一区二区| 欧美成人精品| 在线一区欧美| 狠狠干综合网| 亚洲精品国产精品乱码不99按摩 | 欧美激情亚洲| 欧美在线视频导航| 欧美福利影院| 久久精品视频免费| 欧美日韩在线精品| 久久亚洲欧洲| 日韩午夜电影| 国语自产偷拍精品视频偷 | 亚洲新中文字幕| 在线精品视频一区二区三四| 亚洲美女av网站| 亚洲高清视频中文字幕| 亚洲视频免费在线| 在线精品一区| 亚洲在线视频网站| 国产日韩欧美一区在线| 亚洲国产成人精品女人久久久 | 久久久蜜桃一区二区人| 国产欧美日韩亚州综合| 欧美一区二区久久久| 国产精品亚洲产品| 91久久精品美女高潮| 在线精品视频一区二区| 午夜精品久久久久久久99热浪潮| 一二三区精品| 欧美电影电视剧在线观看| 可以免费看不卡的av网站| 一色屋精品视频免费看| 欧美激情精品| 一区二区高清视频| 在线综合+亚洲+欧美中文字幕| 欧美日韩成人综合天天影院| 美女主播精品视频一二三四| 国产精品久久久久久影视| 亚洲精品在线观看视频| 亚洲高清一区二区三区| 久久国产黑丝| 久久香蕉国产线看观看av| 国产热re99久久6国产精品| 亚洲影视在线播放| 亚洲专区一区二区三区| 欧美日韩亚洲另类| 一区二区三区欧美成人| 国产精品免费小视频| 久久嫩草精品久久久精品| 久久免费的精品国产v∧| 国产欧美日韩三区| 一区二区三区久久精品| 一本不卡影院| 午夜电影亚洲| 久久精品噜噜噜成人av农村| 久久精品30| 国产情人综合久久777777| 在线天堂一区av电影| 亚洲午夜一区二区三区| 久久婷婷一区| 国产精品久久激情| 亚洲欧美久久久| 久久精品成人一区二区三区蜜臀 | 亚洲欧美日韩精品久久久| 久久婷婷国产麻豆91天堂| 久久国产一区二区| 韩日视频一区| 午夜精品av| 欧美~级网站不卡| 亚洲日本理论电影| 国产精品高清一区二区三区| 亚洲免费在线观看| 欧美福利视频在线观看| 亚洲视频在线一区观看| 欧美在线免费一级片| 欧美大尺度在线| 亚洲免费小视频| 好看的日韩视频| 欧美乱妇高清无乱码| 亚洲在线视频网站| 欧美成人免费视频| 亚洲免费在线播放| 亚洲福利一区| 国产精品一区二区你懂的| 另类激情亚洲| 午夜免费日韩视频| 亚洲激情在线| 99精品欧美| 欧美高清你懂得| 午夜精品一区二区三区电影天堂| 乱人伦精品视频在线观看| 亚洲主播在线播放| 亚洲国产日韩欧美| 国产精品视频精品视频| 亚洲欧美日韩精品在线| 免费成人你懂的| 一区二区三区在线视频免费观看| 久久免费视频在线| 亚洲网站视频福利| 久久狠狠久久综合桃花| 在线观看成人av电影| 亚洲一区二区不卡免费| 欧美高清视频在线| 免费成人在线观看视频| 欧美在线观看一区二区| 亚洲一区免费看| 国产精品永久免费视频| 国产精品久久久999| 国产精品久久久久久久久久久久久久 | 欧美国产日韩亚洲一区| 美女脱光内衣内裤视频久久网站| 久久不射中文字幕| 国产精品99久久久久久久久久久久| 美腿丝袜亚洲色图| 99国产麻豆精品| 午夜视频一区| 日韩午夜电影在线观看| 欧美成人有码| 亚洲第一在线| 欧美高潮视频| 国产乱人伦精品一区二区| 老牛影视一区二区三区| 久久久久一区二区三区| 免费久久99精品国产| 亚洲区在线播放| 亚洲午夜国产一区99re久久| 亚洲欧美另类综合偷拍| 欧美中文字幕在线播放|