资源简介
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
- 上一篇:Bezier曲线MFC实现源代码
- 下一篇:国密SM4算法的C语言实现
相关资源
- 本例程采用VC++ 实现JPG格式图片的打开
- c++高仿QQ截图
- 银行家算法模拟实现C++版
- 道格拉斯压缩算法C++实现
- Visual C++开发GIS系统第2版书中代码
- 航空订票管理系统 机场订票管理系统
- moravec算子c++代码
- FCFS和SJF调度算法C++
- FTP服务器C++代码实现
- C++ jpeg图像编码与解码
- 进程调度的设计与实现图形界面c++
- 家谱管理系统C++作业
- VC++异步通信的socket类
- 深度优先搜索算法C++实现
- 数据库管理系统原型开发C/C++
- BP算法程序实现包括matlab、C语言、C
- C++图书管理系统 c++
- C和C++ Windows代码移植到Linux
- 固高GT编程手册的Vc++单轴运动程序
- Kinect程序开发帮助文档C++
- MFC课设高校教师信息管理系统论文
- 指纹识别C++
- The C++ Standard Library(简体中文)
- c++ GridCtrol表格类 控件
- AES加密解密系统 VC++6.0 实现
- VC++access与excel数据的导入导出
- C/C++程序 多元多项式的相乘
- 《面向对象程序设计基础.第二版(
- opengl实现鼠标坐标的显示
- 图像处理 验证码识别C++
评论
共有 条评论