加密演算法 MD5演算法

2022-09-10 00:12:37 字數 1784 閱讀 5341

感覺這個演算法很有趣,那麼就暫時先咕咕咕一篇大神別人寫的模板在這裡

或許等以後有空了再了解原理吧,可能最近到更久的一段時間都沒有空

newuser的md5碼是:18092d7d5ad731776372bf39801b5aac

模板:

#include#includeusing namespace std;

#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)

偷偷寫下:7652830ba1aa87d1777a7ccf1ff54312

似乎用單向散射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發展而來。訊...