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

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>
            国产精品香蕉在线观看| 亚洲二区视频在线| 亚洲视频免费观看| 欧美精品999| 欧美激情aⅴ一区二区三区| 欧美超级免费视 在线| 亚洲激情成人网| 欧美亚洲在线观看| 久久人人爽人人| 在线观看亚洲精品| 久久精品视频在线观看| 一区二区三区精品国产| 噜噜爱69成人精品| 亚洲另类春色国产| 亚洲一区二区精品在线观看| 欧美影院成年免费版| 男人的天堂亚洲在线| 欧美日韩在线视频观看| 国产精品久久久亚洲一区| 国产一区二区精品久久| 亚洲乱码国产乱码精品精98午夜| 亚洲综合精品四区| 久久九九免费| 国产精品毛片大码女人| 精品av久久707| 欧美在线免费观看视频| 美国三级日本三级久久99| 欧美日本韩国一区| 欧美色视频一区| 亚洲黄色成人| 亚洲精品一区中文| 日韩系列欧美系列| 夜夜嗨av色一区二区不卡| 一区二区三区视频在线播放| 在线综合亚洲欧美在线视频| 欧美成ee人免费视频| 牛牛影视久久网| 欧美专区一区二区三区| 国产亚洲精品久久久久婷婷瑜伽| 国产精品视频最多的网站| 在线观看欧美激情| 国产日韩欧美日韩| 国产日韩欧美高清| 欧美成人精品在线| 国产精品欧美久久| 一区在线影院| 亚洲一区二区三区中文字幕| 久久精品国产精品 | 久久久综合网站| 欧美成人一区二区| 欧美精品三区| 欧美日韩国产一级片| 韩国一区电影| 午夜激情亚洲| 亚洲国产精品久久久久久女王| 亚洲午夜一区二区三区| 免费观看在线综合色| 国产一区二区三区在线观看精品 | 久久精品夜色噜噜亚洲aⅴ| 麻豆国产精品777777在线| 午夜视频一区| 日韩亚洲在线| 久久精品视频在线观看| 国产精品黄视频| 在线观看成人av| 在线视频亚洲一区| 欧美一区二区三区四区在线观看| 久久九九热re6这里有精品| 亚洲第一精品夜夜躁人人爽| 欧美一区二区三区播放老司机| 欧美日韩国产在线一区| 亚洲人成人77777线观看| 久久综合99re88久久爱| 亚洲电影第1页| 免费一级欧美片在线观看| 伊人精品久久久久7777| 久久久另类综合| 亚洲一区二区三区中文字幕| 欧美影院精品一区| 一区二区三欧美| 国产精品亚洲成人| 久久久久久亚洲精品中文字幕 | 99re在线精品| 欧美老女人xx| 亚洲欧美国内爽妇网| 午夜欧美电影在线观看| 免费成人黄色片| 欧美搞黄网站| 欧美一区激情视频在线观看| 欧美日韩综合在线| 免费观看成人鲁鲁鲁鲁鲁视频 | 在线观看久久av| 亚洲手机成人高清视频| 亚洲黄色在线| 国产精品亚洲综合一区在线观看| 日韩午夜中文字幕| 欧美日韩精品一区| 国产香蕉久久精品综合网| 亚洲网在线观看| 欧美国产日韩xxxxx| 亚洲免费观看高清完整版在线观看熊 | 国产日本亚洲高清| 国产视频一区在线| 欧美成人精品不卡视频在线观看| 欧美日韩视频在线| 久久视频精品在线| 国产精品丝袜久久久久久app| 另类欧美日韩国产在线| 欧美一区2区视频在线观看| 亚洲福利小视频| 欧美成人精精品一区二区频| 亚洲视频一二| 国模吧视频一区| 狂野欧美激情性xxxx| 欧美专区在线| 一区久久精品| 国产精品午夜在线| 亚洲国产精彩中文乱码av在线播放| 国产美女诱惑一区二区| 久久成人亚洲| 亚洲综合色丁香婷婷六月图片| 男人的天堂亚洲| 亚洲第一综合天堂另类专| 欧美日韩国产限制| 一区二区成人精品| 亚洲第一页在线| 亚洲国产精品一区二区www| 国产欧美综合一区二区三区| 久久高清免费观看| 免费在线观看精品| 欧美一级艳片视频免费观看| 老司机精品视频网站| 久久成人av少妇免费| 宅男噜噜噜66一区二区| 国产精品一区在线观看| 欧美在线视频一区二区三区| 久久人人97超碰国产公开结果| 夜夜嗨av一区二区三区免费区| 欧美一区1区三区3区公司| 一区二区av在线| 久久久天天操| 欧美在线一区二区| 欧美三日本三级少妇三2023| 欧美成ee人免费视频| 国产日本精品| 一区二区不卡在线视频 午夜欧美不卡'| 伊人久久大香线蕉av超碰演员| 午夜精品亚洲一区二区三区嫩草| 一二三区精品| 亚洲欧美99| 亚洲人成网站在线观看播放| 亚洲视频一区二区免费在线观看| 国产主播精品| 一区二区三区四区五区精品| 韩国精品一区二区三区| 亚洲人成网站在线播| 亚洲大片免费看| 亚洲女优在线| 亚洲第一毛片| 久久国产精品99精品国产| 欧美精品导航| 美女成人午夜| 国自产拍偷拍福利精品免费一| 亚洲无线观看| 午夜国产精品影院在线观看| 国产精品久久久久秋霞鲁丝| 日韩亚洲欧美一区二区三区| 亚洲人成绝费网站色www| 亚洲毛片在线观看| 好吊一区二区三区| 欧美高清视频一区二区三区在线观看 | 欧美在线一二三四区| 亚洲欧美文学| 美女日韩在线中文字幕| 欧美精品18| 欧美大色视频| 久久久久国产一区二区三区| 亚洲激情网站| 久久精品91久久久久久再现| 一区二区亚洲欧洲国产日韩| 国产一区二区中文字幕免费看| 一区二区三区蜜桃网| 亚洲欧美成人网| 亚洲高清视频的网址| 亚洲精品一区二区三区av| 久久激情五月激情| 亚洲欧美www| 国产九色精品成人porny| 性欧美超级视频| 亚洲国产精品一区二区尤物区| 久久亚洲综合| 美女视频黄 久久| 在线观看欧美一区| 久久精品国产99国产精品| 亚洲精品久久久久久久久久久| 国产日韩亚洲欧美精品| 亚洲视频国产视频| 欧美日韩国产精品| 亚洲精品在线电影| 久久国产乱子精品免费女|