⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 md5.c

📁 linux下从网卡远程启动
💻 C
字号:
#ifdef SAFEBOOTMODE/* * This is an implementation of the "MD5 Message Digest Algorithm" as * described in *   Bruce Schneier 'Applied Cryptography', pages 436-441, 2nd Edition, 1996, *     John Wiley & Sons, Inc., ISBN 0-471-11709-9. * The MD5 algorithm has been invented by Ron Rivest/"RSA Data Security, Inc."; * Bruce Schneier refers to RFC1321 as the original publication. * * This implementation is copyright 1997 by M. Gutschke. * * This implementation has been optimized for size rather than for speed; * there are a few assumptions that require a little-endian architecture. * The maximum input length is 4GB. * Slight adaptions, as necessary for SafeBoot, by Anselm M. Hoffmeister, 2003. */#include "../include/etherboot.h"static unsigned long md5_buf[16];static unsigned long ABCD[4]={0x67452301L,0xefcdab89L,0x98badcfeL,0x10325476L};static unsigned long md5_len = 0;static unsigned long F(unsigned long X,unsigned long Y,unsigned long Z){ return((X&Y)|((~X)&Z)); }static unsigned long G(unsigned long X,unsigned long Y,unsigned long Z){ return((X&Z)|(Y&(~Z))); }static unsigned long H(unsigned long X,unsigned long Y,unsigned long Z){ return(X^Y^Z); }static unsigned long I(unsigned long X,unsigned long Y,unsigned long Z){ return(Y^(X|(~Z))); }static inline unsigned long rotate(unsigned long i,int s){ return((i << s) | (i >> (32-s))); }static unsigned long ff(unsigned long (*fnc)(unsigned long,unsigned long,					     unsigned long),			unsigned long a,unsigned long b,unsigned long c,			unsigned long d,unsigned long M,int s,			unsigned long t){ return(b+(rotate((a+fnc(b,c,d)+M+t),s))); }static void md5_loop(void){  static unsigned char shifts[4][4] = {    {22,17,12,7},{20,14,9,5},{23,16,11,4},{21,15,10,6}};  static unsigned char idx[64] = {    0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14,15,    1, 6,11, 0, 5,10,15, 4, 9,14, 3, 8,13, 2, 7,12,    5, 8,11,14, 1, 4, 7,10,13, 0, 3, 6, 9,12,15, 2,    0, 7,14, 5,12, 3,10, 1, 8,15, 6,13, 4,11, 2, 9 };  static unsigned long masks[64] = {    0xd76aa478L,0xe8c7b756L,0x242070dbL,0xc1bdceeeL,    0xf57c0fafL,0x4787c62aL,0xa8304613L,0xfd469501L,    0x698098d8L,0x8b44f7afL,0xffff5bb1L,0x895cd7beL,    0x6b901122L,0xfd987193L,0xa679438eL,0x49b40821L,    0xf61e2562L,0xc040b340L,0x265e5a51L,0xe9b6c7aaL,    0xd62f105dL,0x02441453L,0xd8a1e681L,0xe7d3fbc8L,    0x21e1cde6L,0xc33707d6L,0xf4d50d87L,0x455a14edL,    0xa9e3e905L,0xfcefa3f8L,0x676f02d9L,0x8d2a4c8aL,    0xfffa3942L,0x8771f681L,0x6d9d6122L,0xfde5380cL,    0xa4beea44L,0x4bdecfa9L,0xf6bb4b60L,0xbebfbc70L,    0x289b7ec6L,0xeaa127faL,0xd4ef3085L,0x04881d05L,    0xd9d4d039L,0xe6db99e5L,0x1fa27cf8L,0xc4ac5665L,    0xf4292244L,0x432aff97L,0xab9423a7L,0xfc93a039L,    0x655b59c3L,0x8f0ccc92L,0xffeff47dL,0x85845dd1L,    0x6fa87e4fL,0xfe2ce6e0L,0xa3014314L,0x4e0811a1L,    0xf7537e82L,0xbd3af235L,0x2ad7d2bbL,0xeb86d391L};  static unsigned long (*fncs[4])(unsigned long,unsigned long,				  unsigned long) = { F,G,H,I };  int i,j,k,l;  unsigned long abcd[4];  memcpy(abcd, ABCD, 16);  for (i = j = 0; j < 4; j++)    /* rounds FF..II    */    for (k = 0; k < 4; k++)      /* 0..3             */      for (l = 4; l--; i++)      /* a,b,c,d..b,c,d,a */	abcd[(l+1)&3] = ff(fncs[j],			   abcd[(l+1)&3],abcd[(l+2)&3],abcd[(l+3)&3],abcd[l],			   md5_buf[idx[i]],shifts[j][l],masks[i]);  for (i = 4; i--; )    ABCD[i] += abcd[i];  return;}void md5_put(unsigned int ch){  /* this code assumes a little endian architecture! */  ((unsigned char *)md5_buf)[md5_len%64] = ch;  if (((++md5_len)%64) == 0)    md5_loop();  return;}void md5_done(unsigned char *buf){  unsigned long len = md5_len;  int           i;  /* this code assumes a little endian architecture! */  md5_put(0x80);  while ((md5_len%64) != 56)    md5_put(0);  md5_put(len <<  3); md5_put(len >>  5);  md5_put(len >> 13); md5_put(len >> 21);  for (i = 4; i--; )    md5_put(0);  memcpy(buf, ABCD, 16);  md5_len = 0;  {static unsigned long init[4]={    0x67452301L,0xefcdab89L,0x98badcfeL,0x10325476L};  memcpy(ABCD, init, 16); }  return;}#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -