SHA-1.h
#ifndef _SHA1_H
#define _SHA1_H
#include<iostream>
using namespace std;
//4个函数
#define f1(B,C,D) ((B&C)|((~B)&D))
#define f2(B,C,D) (B^C^D)
#define f3(B,C,D) ((B&C)|(B&D)|(C&D))
#define f4(B,C,D) (B^C^D)
typedef unsigned int UInt32;
//信息摘要结构体
struct Message_Digest{
UInt32 H[];
};
//SHA-1类
class SHA1
{
public:
SHA1(){INIT();};
~SHA1(){};
Message_Digest DEAL(UInt32 W[]);//以512bit块为单位处理
private:
void INIT(); //初始杂凑值
UInt32 ROTL(int k,UInt32 W);//循环左移k比特给定的32比特字
//信息摘要
Message_Digest MD;
}; #endif

SHA-1.cpp

#include"SHA-1.h"
//
const UInt32 K[] = {0x5A827999,0x6ED9EBA1,0x8F1BBCDC,0xCA62C1D6};
//初始化
void SHA1::INIT(){
MD.H[] = 0x67452301;
MD.H[] = 0xefcdab89;
MD.H[] = 0x98badcfe;
MD.H[] = 0x10325476;
MD.H[] = 0xc3d2e1f0;
}
//
Message_Digest SHA1::DEAL(UInt32 M[]){
int i;
UInt32 temp;
UInt32 W[];
UInt32 A,B,C,D,E;
INIT();//每次都初始化
for(i=;i<;i++){
W[i] = M[i];
}
for(i=;i<;i++){
W[i] = ROTL(,(W[i-]^W[i-]^W[i-]^W[i-]));
}
//初始寄存器
A = MD.H[];
B = MD.H[];
C = MD.H[];
D = MD.H[];
E = MD.H[];
cout<<"初始:"<<hex<<A<<" "<<B<<" "<<C<<" "<<D<<" "<<E<<endl;
for(i=;i<;i++){
temp = ROTL(,A) + f1(B,C,D) + E + W[i] + K[];
temp &= 0xFFFFFFFF;
E = D;
D = C;
C = ROTL(,B);
B = A;
A = temp;
cout<<dec<<i<<":";
cout<<hex<<A<<" "<<B<<" "<<C<<" "<<D<<" "<<E<<endl;
}
for(i=;i<;i++){
temp = ROTL(,A) + f2(B,C,D) + E + W[i] + K[];
temp &= 0xFFFFFFFF;
E = D;
D = C;
C = ROTL(,B);
B = A;
A = temp;
cout<<dec<<i<<":";
cout<<hex<<A<<" "<<B<<" "<<C<<" "<<D<<" "<<E<<endl;
}
for(i=;i<;i++){
temp = ROTL(,A) + f3(B,C,D) + E + W[i] + K[];
temp &= 0xFFFFFFFF;
E = D;
D = C;
C = ROTL(,B);
B = A;
A = temp;
cout<<dec<<i<<":";
cout<<hex<<A<<" "<<B<<" "<<C<<" "<<D<<" "<<E<<endl;
}
for(i=;i<;i++){
temp = ROTL(,A) + f4(B,C,D) + E + W[i] + K[];
temp &= 0xFFFFFFFF;
E = D;
D = C;
C = ROTL(,B);
B = A;
A = temp;
cout<<dec<<i<<":";
cout<<hex<<A<<" "<<B<<" "<<C<<" "<<D<<" "<<E<<endl;
}
MD.H[] = (MD.H[]+A) & 0xFFFFFFFF;
MD.H[] = (MD.H[]+B) & 0xFFFFFFFF;
MD.H[] = (MD.H[]+C) & 0xFFFFFFFF;
MD.H[] = (MD.H[]+D) & 0xFFFFFFFF;
MD.H[] = (MD.H[]+E) & 0xFFFFFFFF; return MD;
}
//循环左移
UInt32 SHA1::ROTL(int k,UInt32 W){
return ((W << k) & 0xFFFFFFFF) | (W) >> (-(k));
}

TEST.cpp

#include<iostream>
#include"SHA-1.h"
using namespace std;
//
typedef unsigned int UInt32;
typedef unsigned __int64 UInt64;
typedef unsigned char UChar;
#define Max 1000//最大字符数
SHA1 sha1=SHA1();
Message_Digest M_D;
UInt32 W[Max/];//整型
UInt32 M[]; //存分组信息
//压缩+显示
void compress(){ M_D = sha1.DEAL(W);
cout<<"哈希值: ";
cout<<hex<<M_D.H[]<<" ";
cout<<hex<<M_D.H[]<<" ";
cout<<hex<<M_D.H[]<<" ";
cout<<hex<<M_D.H[]<<" ";
cout<<hex<<M_D.H[];
cout<<endl;
}
//添加填充位+添加长度
void PAD(UChar Y[Max]){
//x+1+d+l=|x|
UInt32 i,j;
UInt32 T1=,T2=,T3=,T4=;
UChar temp[Max]={};
UInt64 x = strlen((char *)Y);//数据长度
UInt32 d = abs(-x) % ; //填充长度
UInt32 n = (x+)/+; //分组数
UInt32 m = x%; //最后组数据长度
UInt32 l = ;
cout<<"数据长度x:"<<int(x)<<" ";
cout<<"填充长度d:"<<d<<" ";
cout<<"分组数量n:"<<n<<" ";
cout<<"最后长度m:"<<m<<endl;
//不填充
for(i=;i<x;i++){
temp[i] = Y[i];
}
//填充1次1000 0000
temp[x] = 0x80;
//填充d次0000 0000
for(i=x+;i<x+d+;i++){
temp[i] = 0x00;
}
//填充长度的63-0位
for(i=;i<=l;i++){
temp[(n*)-i] = (UChar)(*x>>(i-)*);
}
//无符号字符转换为无符号整型
for(i=;i<Max/;i++){
for(j=;j<;j++){
if(j==)
T1 = temp[*i+j];
if(j==)
T2 = temp[*i+j];
if(j==)
T3 = temp[*i+j];
if(j==)
T4 = temp[*i+j];
}
W[i] = (T1<<) + (T2<<) + (T3<<) +T4;
}
//显示16进制数据
cout<<"16进制数据:";
for(i=;i<n*;i++){
cout<<hex<<" "<<W[i];
}
cout<<endl;
//分组处理
for(i=;i<n;i++){
cout<<"分组处理:"<<i+<<endl;
for(j=;j<;j++){
M[j] = W[(i*)+j];
}
compress();//sha-1压缩
}
}
//主函数
int main(){
UChar Y[Max];
cout<<"请输入要加密的字符串(最大"<<Max<<"个):"<<endl;
cin>>Y;
PAD(Y); system("pause");
return ;
}

SHA-1算法的更多相关文章

  1. BASE64,MD5,SHA,HMAC加密與解密算法(java)

    package com.ice.webos.util.security; import java.io.UnsupportedEncodingException; import java.math.B ...

  2. 密码学系列之:NIST和SHA算法

    目录 简介 SHA1 SHA2 SHA3 简介 SHA算法大家应该都很熟悉了,它是一个用来计算hash的算法,目前的SHA算法有SHA1,SHA2和SHA3种.这三种算法都是由美国NIST制定的. N ...

  3. 数据摘要算法的测试效率(SHA、MD5和CRC32)

    1.算法概述 数据摘要算法是密码学算法中非常重要的一个分支,它通过对所有数据提取指纹信息以实现数据签名.数据完整性校验等功能,由于其不可逆性,有时候会被用做敏感信息的加密.数据摘要算法也被称为哈希(H ...

  4. PHP中各种Hash算法性能比较

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...

  5. [区块链] 密码学中Hash算法(基础)

    在介绍Hash算法之前,先给大家来个数据结构中对hash表(散列表)的简单解释,然后我再逐步深入,讲解一下hash算法. 一.Hash原理——基础篇 1.1 概念 哈希表就是一种以 键-值(key-i ...

  6. 【区块链】【一】Hash 算法【转】

    问题导读1.哈希算法在区块链的作用是什么?2.什么是哈希算法?3.哈希算法是否可逆?4.比特币采用的是什么哈希算法? 作用在学习哈希算法前,我们需要知道哈希在区块链的作用哈希算法的作用如下:区块链通过 ...

  7. Hash算法总结(转)

    1. Hash是什么,它的作用先举个例子.我们每个活在世上的人,为了能够参与各种社会活动,都需要一个用于识别自己的标志.也许你觉得名字或是身份证就足以代表你这个人,但是这种代表性非常脆弱,因为重名的人 ...

  8. 信息摘要算法之七:SHA在区块链中的应用

    最近几年比特币的火爆带动了人们对区块链技术的研究.当然我们在这里并不讨论区块链技术本身,而是讨论一下区块链中的SHA算法的应用.对于SHA系列算法我们已经在前面作了说明,在这里也不再重复. 1.区块链 ...

  9. 比特币算法——SHA256算法介绍

    SHA256是安全散列算法SHA(Secure Hash Algorithm)系列算法之一,其摘要长度为256bits,即32个字节,故称SHA256.SHA系列算法是美国国家安全局 (NSA) 设计 ...

  10. MAC算法

    MAC算法 (Message Authentication Codes) 带秘密密钥的Hash函数:消息的散列值由只有通信双方知道的秘密密钥K来控制.此时Hash值称作MAC. 原理:在md与sha系 ...

随机推荐

  1. 恋爱虽易,相处不易:当EntityFramework爱上AutoMapper

    剧情开始 为何相爱? 相处的问题? 女人的伟大? 剧情收尾? 有时候相识即是一种缘分,相爱也不需要太多的理由,一个眼神足矣,当EntityFramework遇上AutoMapper,就是如此,恋爱虽易 ...

  2. ABP框架 - OData 集成

    文档目录 本节内容: 简介 安装 安装Nuget包 设置模块依赖 配置你的实体 创建控制器 示例 获取实体列表 请求 响应 获取单个实体 请求 响应 获取单个实体及导航属性 请求 响应 查询 请求 响 ...

  3. SQLServer文件收缩-图形化+命令

    汇总篇:http://www.cnblogs.com/dunitian/p/4822808.html#tsql 收缩前 图形化演示: 不仅仅可以收缩日记文件,数据库文件也是可以收缩的,只不过日记收缩比 ...

  4. 10个最好用的HTML/CSS 工具、插件和资料库

    大家在使用HTML/CSS开发项目的过程中,有使用过哪些工具,插件和库?下面介绍的10种HTML/CSS工具,插件和资料库,是国外程序员经常用到的. Firebug Lite FirebugLite ...

  5. 【接口开发】浅谈 SOAP Webserver 与 Restful Webserver 区别

    接口,强大,简单,交互,跨越平台 下面简单阐述这两大接口思想 一 REST: REST是一种架构风格,其核心是面向资源,REST专门针对网络应用设计和开发方式,以降低开发的复杂性,提高系统的可伸缩性. ...

  6. .NET平台开源项目速览(14)最快的对象映射组件Tiny Mapper

    好久没有写文章,工作甚忙,但每日还是关注.NET领域的开源项目.五一休息,放松了一下之后,今天就给大家介绍一个轻量级的对象映射工具Tiny Mapper:号称是.NET平台最快的对象映射组件.那就一起 ...

  7. Hawk 4.4 执行器

    执行器是负责将Hawk的结果传送到外部环境的工具.你可以写入数据表,数据库,甚至执行某个特定的动作,或是生成文件等等. 在调试模式下,执行器都是不工作的.这是为了避免产生副作用.否则,每刷新一遍数据, ...

  8. Golang 编写的图片压缩程序,质量、尺寸压缩,批量、单张压缩

    目录: 前序 效果图 简介 全部代码 前序: 接触 golang 不久,一直是边学边做,边总结,深深感到这门语言的魅力,等下要跟大家分享是最近项目 服务端 用到的图片压缩程序,我单独分离了出来,做成了 ...

  9. SharePoint 2013管理中心里【管理服务器上的服务】不见了

    打开管理中心,准备配置Managed Metadata Service,发现"管理服务器上的服务"不见了 那我自己拼url直接访问:http://xxxx/_admin/Serve ...

  10. Xcode 锁终端

    锁终端 输入: <1>cd /Applications/Xcode.app 回车 结果显示: Xcode.app 输入: <2>sudo chown -hR root:whee ...