#include #include #include using namespace std; string sha1pad(const string &str)//sha1填充 { string astr=str; astr+=(char)(0x80); while ((astr.size()<<3) % 512 != 448) { astr+=(char)0; } for (int i=56;i>=0;i-=8) { astr+=(char)((str.size()<<3)>>i); } return astr; } unsigned ROTL(const unsigned &word,const int &num)//word循环左移num位 { return (word<>(32-num)); } unsigned sha1f(const unsigned &B,const unsigned &C,const unsigned &D,const unsigned &t) { switch(t/20) { case 0: return (B&C)|((~B)&D); case 2: return (B&C)|(B&D)|(C&D); case 1: case 3: return B^C^D; default: return 0; } } string sha1(const string &str) { string strs=str; const unsigned K[4]={0x5a827999,0x6ed9eba1,0x8f1bbcdc,0xca62c1d6}; unsigned H[5]={0x67452301,0xefcdab89,0x98badcfe,0x10325476,0xc3d2e1f0}; unsigned W[80]={0}; for (int i=0;i>strs; return strs; } int main() { string str; cout<<"input a string:"<>str; //str=""; for (int i=0;i<1000000;i++) { str+='a'; } string astr=sha1pad(str); cout<<"SHA-1:"<