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

Prayer

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

md5的實現

Posted on 2010-10-09 16:44 Prayer 閱讀(643) 評論(0)  編輯 收藏 引用 所屬分類: 算法
 具體的一個MD5實現
  /*
  * 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>
            久久这里只有精品视频首页| 欧美大香线蕉线伊人久久国产精品| 亚洲欧美久久久久一区二区三区| 国产精品一区二区在线| 久久精品在线视频| 一区二区三区久久久| 欧美福利电影网| 久久婷婷麻豆| 欧美亚洲成人免费| 欧美a级片一区| 久久亚洲一区| 一本不卡影院| 99精品欧美一区二区三区综合在线| 在线日本欧美| 亚洲精选国产| 亚洲影院在线| 久久av最新网址| 麻豆91精品| 亚洲国产三级在线| 欧美激情一区二区久久久| 欧美国产精品专区| 亚洲精品1区| 亚洲一区二区在线免费观看视频 | 国产日韩欧美不卡在线| 国产精品久久久久91| 欧美日韩亚洲一区二| 欧美日韩伦理在线| 亚洲午夜精品福利| 一区二区三区欧美在线| 亚洲影视综合| 久久精品亚洲热| 免播放器亚洲一区| 亚洲黄色在线| 亚洲免费视频在线观看| 久久久久久自在自线| 模特精品在线| 在线亚洲美日韩| 欧美成人高清视频| 欧美先锋影音| 国产伊人精品| 欧美黄色aa电影| 国产精品福利久久久| 国产一区二区三区久久悠悠色av| 在线看日韩欧美| 亚洲小视频在线观看| 久久精品视频在线播放| 亚洲级视频在线观看免费1级| 国产一区日韩欧美| 欧美日韩亚洲国产一区| 黄色在线成人| 亚洲欧美一区在线| 欧美激情一区二区三区高清视频| 日韩一级大片在线| 久久精品盗摄| 国产精品乱码一区二区三区| 亚洲国产精品视频一区| 性欧美1819sex性高清| 欧美大色视频| 欧美一区二区精美| 欧美三区免费完整视频在线观看| 在线不卡视频| 免费成人美女女| 免费中文日韩| 日韩午夜激情| 欧美在线国产精品| 久久av老司机精品网站导航| 黄色成人在线网址| 亚洲国产第一页| 午夜精品美女自拍福到在线 | 欧美一区二区三区在线播放| 欧美成人免费在线观看| 欧美好骚综合网| 一级日韩一区在线观看| 欧美成人精品不卡视频在线观看| 国产精品亚洲一区| 亚洲福利视频免费观看| 午夜精品久久久99热福利| 欧美成人免费在线观看| 夜夜嗨av一区二区三区免费区| 国产欧美二区| 欧美三区免费完整视频在线观看| 国产精品久久久久久久久免费樱桃| 亚洲麻豆一区| 亚洲精品永久免费精品| 国产精品日本一区二区| 性色av一区二区三区红粉影视| 一区二区欧美在线观看| 午夜精品99久久免费| 国产精品午夜在线| 久久在线91| 国产一区二区精品丝袜| 免费人成精品欧美精品| 一本色道久久综合狠狠躁篇的优点| 亚洲精品视频免费观看| 欧美大片一区| 亚洲第一视频网站| 亚洲精品一区二区在线| 欧美一区二区三区免费看| 亚洲第一网站免费视频| 欧美久久一区| 欧美亚洲视频一区二区| 老牛国产精品一区的观看方式| 在线观看一区二区精品视频| 亚洲承认在线| 在线观看一区视频| 久久免费国产精品1| 欧美午夜大胆人体| 在线一区日本视频| 午夜亚洲福利| 国产精品一区久久| 男人的天堂亚洲| 国内在线观看一区二区三区| 久久青草欧美一区二区三区| 亚洲精品在线三区| 亚洲一区精品电影| 欧美日韩精品欧美日韩精品一 | 一区二区免费在线观看| 国产色综合久久| 亚洲激情午夜| 国内成人自拍视频| 午夜精品国产更新| 欧美精品一区二区三区蜜臀| 亚洲欧美国产精品桃花| 美女视频网站黄色亚洲| 亚洲一区二区三区免费观看 | 国产精品久久久久国产精品日日| 欧美一级大片在线观看| 欧美国产日韩一区二区在线观看| 日韩视频在线观看一区二区| 久久精品国产亚洲一区二区| 91久久精品国产| 亚洲国产成人在线视频| 国产午夜精品久久久| 亚洲人被黑人高潮完整版| 91久久精品一区二区三区| 亚洲男人av电影| 亚洲精品一区二区三区婷婷月| 夜夜嗨av一区二区三区网站四季av| 欧美精品www| 免费欧美在线| 欧美极品一区| 久久九九99| 免费日韩av片| 国产在线拍偷自揄拍精品| 亚洲乱码国产乱码精品精| 影音先锋久久精品| 亚洲调教视频在线观看| 精品成人一区二区三区四区| 亚洲精品欧美日韩专区| 欧美一区二区三区婷婷月色| 亚洲欧洲日产国产网站| 亚洲成在线观看| 欧美日韩亚洲视频| 久久精品人人做人人综合 | 久久婷婷麻豆| 亚洲第一在线综合在线| 亚洲综合色激情五月| 亚洲午夜高清视频| 欧美性理论片在线观看片免费| 性做久久久久久久免费看| 国产一区二区三区视频在线观看| 亚洲高清视频的网址| 日韩亚洲欧美精品| 欧美一级视频精品观看| 久久免费视频这里只有精品| 国产精品国产三级国产aⅴ浪潮| 亚洲私人影院在线观看| 亚洲色图制服丝袜| 欧美日韩一区二区在线观看| 久久久久久噜噜噜久久久精品| 国产一区二区成人| 久久激情网站| 亚洲美女av网站| 亚洲自拍另类| 韩国成人精品a∨在线观看| 欧美在线啊v一区| 亚洲高清视频在线观看| 一本大道av伊人久久综合| 久久国产欧美精品| 亚洲精品护士| 日韩午夜在线视频| 欧美顶级艳妇交换群宴| 日韩视频免费观看| 亚洲中无吗在线| 国产精品一区二区三区四区| 欧美国产综合一区二区| 在线观看亚洲| 老司机精品导航| 欧美大片免费观看| 亚洲一区成人| 伊人成人网在线看| 久久激情久久| 亚洲巨乳在线| 免费永久网站黄欧美| 在线性视频日韩欧美| 在线看无码的免费网站| 欧美日韩亚洲综合在线| 老司机精品久久| 亚洲欧美日本另类| 亚洲精品久久在线|