感覺這個演算法很有趣,那麼就暫時先咕咕咕一篇大神別人寫的模板在這裡
或許等以後有空了再了解原理吧,可能最近到更久的一段時間都沒有空
newuser的md5碼是:18092d7d5ad731776372bf39801b5aac
模板:
#include#includeusing namespace std;偷偷寫下:7652830ba1aa87d1777a7ccf1ff54312#define shift(x, n) (((x) << (n)) | ((x) >> (32-(n))))//右移的時候,高位一定要補零,而不是補充符號位
#define f(x, y, z) (((x) & (y)) | ((~x) & (z)))
#define g(x, y, z) (((x) & (z)) | ((y) & (~z)))
#define h(x, y, z) ((x) ^ (y) ^ (z))
#define i(x, y, z) ((y) ^ ((x) | (~z)))
#define a 0x67452301
#define b 0xefcdab89
#define c 0x98badcfe
#define d 0x10325476
//strbaye的長度
unsigned int strlength;
//a,b,c,d的臨時變數
unsigned int atemp;
unsigned int btemp;
unsigned int ctemp;
unsigned int dtemp;
//常量ti unsigned int(abs(sin(i+1))*(2pow32))
const unsigned int k=;
//向左位移數
const unsigned int s=;
const char str16="0123456789abcdef";
void mainloop(unsigned int m)
else if (i<32)
else if(i<48)else
unsigned int tmp=d;
d=c;
c=b;
b=b+shift((a+f+k[i]+m[g]),s[i]);
a=tmp;
}atemp=a+atemp;
btemp=b+btemp;
ctemp=c+ctemp;
dtemp=d+dtemp;}/*
*填充函式
*處理後應滿足bits≡448(mod512),位元組就是bytes≡56(mode64)
*填充方式為先加乙個1,其它位補零
*最後加上64位的原來長度
*/unsigned int* add(string str)
strbyte[str.length()>>2]|=0x80<<(((str.length()%4))*8);//尾部新增1 乙個unsigned int儲存4個字元資訊,所以用128左移
/**新增原長度,長度指位的長度,所以要乘8,然後是小端序,所以放在倒數第二個,這裡長度只用了32位
*/strbyte[num*16-2]=str.length()*8;
return strbyte;
}string changehex(int a)
str+=str1;
}return str;
}string ge***5(string source)
似乎用單向散射md5演算法可以搞出好多事情來額。
md5加密演算法
md5.h ifndef md5h define md5h include include void rol unsigned int s,unsigned short cx 32位數迴圈左移實現函式 void ltob unsigned int i b l互轉,接受uint型別 unsigned ...
MD5加密演算法
md5訊息摘要演算法 message digest algorithm 它對輸入的任意長度的訊息進行運算,產生乙個128位的訊息摘要。演算法原理 資料填充 填充訊息使其長度與448模512同餘 長度 448 mod 512 即時訊息長度本身已經滿足了上述長度要求也需要填充。填充方法 附乙個1在訊息後...
加密演算法 MD5
一 簡介 md5的全稱是message digest algorithm 5 資訊摘要演算法 在90年代初由mit laboratory for computer science和rsa data security inc的ronald l.rivest開發出來,經md2 md3和md4發展而來。訊...