• 大小: 1KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-05-23
  • 语言: C/C++
  • 标签: SHA-1  C++  

资源简介

C++写的SHA-1算法实现源代码,供借鉴学习使用~~~

资源截图

代码片段和文件信息

#include 
#include 
#include 
#include 
using namespace std;

unsigned circleShift(const unsigned& wordconst int& bits){
return (word<>(32-bits));
}

unsigned sha1Fun(const unsigned& Bconst unsigned& Cconst unsigned& Dconst 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;
}

return t;
}

string sha1(const string& strRaw){

string str(strRaw);

str+=(unsigned char)(0x80);

// 每个字节8位所以要乘8左移3位
while (str.size()<<3 % 512 != 448){
str+=(char)0;
}

// 写入原始数据长度
for (int i(56);i>=0;i-=8){
str+=(unsigned char)((((unsigned __int64)strRaw.size())<<3) >> i);
}

const unsigned K[4]={0x5a8279990x6ed9eba10x8f1bbcdc0xca62c1d6};
unsigned A(0x67452301)B(0xefcdab89)C(0x98badcfe)D(0x10325476)E(0xc3d2e1f0)T(0);
unsigned W[80]={0};

// 每次处理64字节共512位
for (unsigned i(0);i!=str.size();i+=64){
// 前16个字为原始数据
for (unsigned t(0);t!=16;++t){
// 将4个8位数据放入一个32位变量中
W[t]=((unsigned)str[i+4*t] & 0xff)<<24 |
((unsigned)str[i+4*t+1] & 0xff)<<16 |
((unsigned)str[i+4*t+2] & 0xff)<<8 |
((unsigned)str[i+4*t+3] & 0xff);
}

// 填充
for (unsigned t(16);t!=80;++t){
W[t]=circleShift(W[t-3] ^ W[t-8] ^ W[t-14] ^ W[t-16]1);
}

for (unsigned t(0);t!=80;++t){
T=circleShift(A5) + sha1Fun(BCDt) + E + W[t] + K[t/20];
E=D; 
D=C; 
C=circleShift(B30); 
B=A; 
A=T;
}

A+=0x67452301;
B+=0xefcdab89;
C+=0x98badcfe;
D+=0x10325476;
E+=0xc3d2e1f0;
}

stringstream ss;
ss< ss>>str;

return str;
}

int main(int argcchar *argv[]){

string str(““);

cout<<“in put a string :“< getline(cinstr);

cout<<“raw  string: “< <<“sha1 encode: “< system(“pause“);
return 0;
}

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件        2023  2014-09-29 09:20  SHA1.cpp

评论

共有 条评论