sha256
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
|
//SHA512.h#ifndef SHA512_H#define SHA512_H#include <string> class SHA512{protected: typedef unsigned char uint8; typedef unsigned int uint32; typedef unsigned long long uint64; const static uint64 sha512_k[]; static const unsigned int SHA384_512_BLOCK_SIZE = (1024/8); public: void init(); void update(const unsigned char *message, unsigned int len); void final(unsigned char *digest); static const unsigned int DIGEST_SIZE = ( 512 / 8); protected: void transform(const unsigned char *message, unsigned int block_nb); unsigned int m_tot_len; unsigned int m_len; unsigned char m_block[2 * SHA384_512_BLOCK_SIZE]; uint64 m_h[8];}; std::string sha512(std::string input); #define SHA2_SHFR(x, n) (x >> n)#define SHA2_ROTR(x, n) ((x >> n) | (x << ((sizeof(x) << 3) - n)))#define SHA2_ROTL(x, n) ((x << n) | (x >> ((sizeof(x) << 3) - n)))#define SHA2_CH(x, y, z) ((x & y) ^ (~x & z))#define SHA2_MAJ(x, y, z) ((x & y) ^ (x & z) ^ (y & z))#define SHA512_F1(x) (SHA2_ROTR(x, 28) ^ SHA2_ROTR(x, 34) ^ SHA2_ROTR(x, 39))#define SHA512_F2(x) (SHA2_ROTR(x, 14) ^ SHA2_ROTR(x, 18) ^ SHA2_ROTR(x, 41))#define SHA512_F3(x) (SHA2_ROTR(x, 1) ^ SHA2_ROTR(x, 8) ^ SHA2_SHFR(x, 7))#define SHA512_F4(x) (SHA2_ROTR(x, 19) ^ SHA2_ROTR(x, 61) ^ SHA2_SHFR(x, 6))#define SHA2_UNPACK32(x, str) \{ \ *((str) + 3) = (uint8) ((x) ); \ *((str) + 2) = (uint8) ((x) >> 8); \ *((str) + 1) = (uint8) ((x) >> 16); \ *((str) + 0) = (uint8) ((x) >> 24); \}#define SHA2_UNPACK64(x, str) \{ \ *((str) + 7) = (uint8) ((x) ); \ *((str) + 6) = (uint8) ((x) >> 8); \ *((str) + 5) = (uint8) ((x) >> 16); \ *((str) + 4) = (uint8) ((x) >> 24); \ *((str) + 3) = (uint8) ((x) >> 32); \ *((str) + 2) = (uint8) ((x) >> 40); \ *((str) + 1) = (uint8) ((x) >> 48); \ *((str) + 0) = (uint8) ((x) >> 56); \}#define SHA2_PACK64(str, x) \{ \ *(x) = ((uint64) *((str) + 7) ) \ | ((uint64) *((str) + 6) << 8) \ | ((uint64) *((str) + 5) << 16) \ | ((uint64) *((str) + 4) << 24) \ | ((uint64) *((str) + 3) << 32) \ | ((uint64) *((str) + 2) << 40) \ | ((uint64) *((str) + 1) << 48) \ | ((uint64) *((str) + 0) << 56); \}#endif//SHA512.cpp#include <cstring>#include <fstream>#include "sha512.h" const unsigned long long SHA512::sha512_k[80] = //ULL = uint64 {0x428a2f98d728ae22ULL, 0x7137449123ef65cdULL, 0xb5c0fbcfec4d3b2fULL, 0xe9b5dba58189dbbcULL, 0x3956c25bf348b538ULL, 0x59f111f1b605d019ULL, 0x923f82a4af194f9bULL, 0xab1c5ed5da6d8118ULL, 0xd807aa98a3030242ULL, 0x12835b0145706fbeULL, 0x243185be4ee4b28cULL, 0x550c7dc3d5ffb4e2ULL, 0x72be5d74f27b896fULL, 0x80deb1fe3b1696b1ULL, 0x9bdc06a725c71235ULL, 0xc19bf174cf692694ULL, 0xe49b69c19ef14ad2ULL, 0xefbe4786384f25e3ULL, 0x0fc19dc68b8cd5b5ULL, 0x240ca1cc77ac9c65ULL, 0x2de92c6f592b0275ULL, 0x4a7484aa6ea6e483ULL, 0x5cb0a9dcbd41fbd4ULL, 0x76f988da831153b5ULL, 0x983e5152ee66dfabULL, 0xa831c66d2db43210ULL, 0xb00327c898fb213fULL, 0xbf597fc7beef0ee4ULL, 0xc6e00bf33da88fc2ULL, 0xd5a79147930aa725ULL, 0x06ca6351e003826fULL, 0x142929670a0e6e70ULL, 0x27b70a8546d22ffcULL, 0x2e1b21385c26c926ULL, 0x4d2c6dfc5ac42aedULL, 0x53380d139d95b3dfULL, 0x650a73548baf63deULL, 0x766a0abb3c77b2a8ULL, 0x81c2c92e47edaee6ULL, 0x92722c851482353bULL, 0xa2bfe8a14cf10364ULL, 0xa81a664bbc423001ULL, 0xc24b8b70d0f89791ULL, 0xc76c51a30654be30ULL, 0xd192e819d6ef5218ULL, 0xd69906245565a910ULL, 0xf40e35855771202aULL, 0x106aa07032bbd1b8ULL, 0x19a4c116b8d2d0c8ULL, 0x1e376c085141ab53ULL, 0x2748774cdf8eeb99ULL, 0x34b0bcb5e19b48a8ULL, 0x391c0cb3c5c95a63ULL, 0x4ed8aa4ae3418acbULL, 0x5b9cca4f7763e373ULL, 0x682e6ff3d6b2b8a3ULL, 0x748f82ee5defb2fcULL, 0x78a5636f43172f60ULL, 0x84c87814a1f0ab72ULL, 0x8cc702081a6439ecULL, 0x90befffa23631e28ULL, 0xa4506cebde82bde9ULL, 0xbef9a3f7b2c67915ULL, 0xc67178f2e372532bULL, 0xca273eceea26619cULL, 0xd186b8c721c0c207ULL, 0xeada7dd6cde0eb1eULL, 0xf57d4f7fee6ed178ULL, 0x06f067aa72176fbaULL, 0x0a637dc5a2c898a6ULL, 0x113f9804bef90daeULL, 0x1b710b35131c471bULL, 0x28db77f523047d84ULL, 0x32caab7b40c72493ULL, 0x3c9ebe0a15c9bebcULL, 0x431d67c49c100d4cULL, 0x4cc5d4becb3e42b6ULL, 0x597f299cfc657e2aULL, 0x5fcb6fab3ad6faecULL, 0x6c44198c4a475817ULL}; void SHA512::transform(const unsigned char *message, unsigned int block_nb){ uint64 w[80]; uint64 wv[8]; uint64 t1, t2; const unsigned char *sub_block; int i, j; for (i = 0; i < (int) block_nb; i++) { sub_block = message + (i << 7); for (j = 0; j < 16; j++) { SHA2_PACK64(&sub_block[j << 3], &w[j]); } for (j = 16; j < 80; j++) { w[j] = SHA512_F4(w[j - 2]) + w[j - 7] + SHA512_F3(w[j - 15]) + w[j - 16]; } for (j = 0; j < 8; j++) { wv[j] = m_h[j]; } for (j = 0; j < 80; j++) { t1 = wv[7] + SHA512_F2(wv[4]) + SHA2_CH(wv[4], wv[5], wv[6]) + sha512_k[j] + w[j]; t2 = SHA512_F1(wv[0]) + SHA2_MAJ(wv[0], wv[1], wv[2]); wv[7] = wv[6]; wv[6] = wv[5]; wv[5] = wv[4]; wv[4] = wv[3] + t1; wv[3] = wv[2]; wv[2] = wv[1]; wv[1] = wv[0]; wv[0] = t1 + t2; } for (j = 0; j < 8; j++) { m_h[j] += wv[j]; } }} void SHA512::init(){ m_h[0] = 0x6a09e667f3bcc908ULL; m_h[1] = 0xbb67ae8584caa73bULL; m_h[2] = 0x3c6ef372fe94f82bULL; m_h[3] = 0xa54ff53a5f1d36f1ULL; m_h[4] = 0x510e527fade682d1ULL; m_h[5] = 0x9b05688c2b3e6c1fULL; m_h[6] = 0x1f83d9abfb41bd6bULL; m_h[7] = 0x5be0cd19137e2179ULL; m_len = 0; m_tot_len = 0;} void SHA512::update(const unsigned char *message, unsigned int len){ unsigned int block_nb; unsigned int new_len, rem_len, tmp_len; const unsigned char *shifted_message; tmp_len = SHA384_512_BLOCK_SIZE - m_len; rem_len = len < tmp_len ? len : tmp_len; memcpy(&m_block[m_len], message, rem_len); if (m_len + len < SHA384_512_BLOCK_SIZE) { m_len += len; return; } new_len = len - rem_len; block_nb = new_len / SHA384_512_BLOCK_SIZE; shifted_message = message + rem_len; transform(m_block, 1); transform(shifted_message, block_nb); rem_len = new_len % SHA384_512_BLOCK_SIZE; memcpy(m_block, &shifted_message[block_nb << 7], rem_len); m_len = rem_len; m_tot_len += (block_nb + 1) << 7;} void SHA512::final(unsigned char *digest){ unsigned int block_nb; unsigned int pm_len; unsigned int len_b; int i; block_nb = 1 + ((SHA384_512_BLOCK_SIZE - 17) < (m_len % SHA384_512_BLOCK_SIZE)); len_b = (m_tot_len + m_len) << 3; pm_len = block_nb << 7; memset(m_block + m_len, 0, pm_len - m_len); m_block[m_len] = 0x80; SHA2_UNPACK32(len_b, m_block + pm_len - 4); transform(m_block, block_nb); for (i = 0 ; i < 8; i++) { SHA2_UNPACK64(m_h[i], &digest[i << 3]); }} std::string sha512(std::string input){ unsigned char digest[SHA512::DIGEST_SIZE]; memset(digest,0,SHA512::DIGEST_SIZE); SHA512 ctx = SHA512(); ctx.init(); ctx.update((unsigned char*)input.c_str(), input.length()); ctx.final(digest); char buf[2*SHA512::DIGEST_SIZE+1]; buf[2*SHA512::DIGEST_SIZE] = 0; for (int i = 0; i < SHA512::DIGEST_SIZE; i++) sprintf(buf+i*2, "%02x", digest[i]); return std::string(buf);} //main.cpp#include <iostream>#include "sha512.h"using namespace std; int main(int argc, char *argv[]){ string plain_text = "This is a SHA215 example"; string sha512_code= sha512(plain_text); cout<<plain_text<<"通过sha512获得的摘要值:"<< sha512_code<< endl; system("pause"); return 0;} |
-
SHA
- 中文名
- 安全哈希算法
- 外文名
- SHA
- 提出者
- 美国国家标准技术研究所
- 提出时间
- 2008年
- 适用领域范围
- 数字签名标准里面数字签名算法
基本信息 编辑
简介
散列算法
原理
SHA-1与MD5的比较
SHA-1停止计划
1、所有Windows受信任的根证书颁发机构(CA)从2016年1月1日起必须停止签发新的SHA-1签名算法SSL证书和代码签名证书;
2、对于SSL证书,Windows将于2017年1月1日起停止支持SHA1证书。也就是说:任何在之前签发的SHA-1证书必须替换成SHA-2证书;
3、对于代码签名证书,Windows将于2016年1月1日停止接受没有时间戳的SHA-1签名的代码和SHA-1证书。也就是说,Windows仍
然接受在2016年1月1日之前使用SAH-1签名的已经加上RFC3161时间戳的代码,直到微软认为有可能出现SHA-1攻击时。
低SHA-1证书的安全指示,逐步停止对使用SHA-1散列算法证书的支持。近日,Chrome 39新版本 PC
端发布,在部分操作系统下,该版本浏览器中已开始出现“该网站使用的安全设置已过期”
提示,在接下来的6个月内会变得越来越严格。最终,使用了有效期至2016年的SHA-1证书的站点可能会被给予黄色警告。
中表示:“现在依然有不少网站使用基于 SHA-1签名的 SSL证书,所以我们决定加入微软和谷歌的阵营,认为应在 2016 年 1 月 1
日前停止发放 SHA-1 证书,在 2017 年 1 月1 日后不再信任此证书。”
应用
编辑
计算MD5或sha-1加密哈希值的文件
SHA-1 Java 实现源码
摘要计算函数
单元摘要计算函数
测试
sha256的更多相关文章
- SHA-256算法
SHA-.h #ifndef _SHA_256_H #define _SHA_256_H #include<iostream> using namespace std; typedef u ...
- sha256 C语言
/** * \file sha2.h * * \brief SHA-224 and SHA-256 cryptographic hash function * * Copyright (C) 2006 ...
- asp中的md5/sha1/sha256算法收集
对于asp这种古董级的技术,这年头想找一些有用的资料已经不容易了,下面是一些常用的加密算法: md5 (将以下代码另存为md5.inc) <% Private Const BITS_TO_A_B ...
- linux 使用rpm安装软件时,遇到"warning: rpmts_HdrFromFdno: Header V3 RSA/SHA256 Signature, key ID fd431d51: NOKEY "错误
建议的做法: warning: rpmts_HdrFromFdno: Header V3 RSA/SHA256 Signature, key ID fd431d51: NOKEY 网上资料说这是 ...
- C#加密解密(DES,AES,Base64,md5,SHA256,RSA,RC4)
一:异或^简单加解密(数字类型) 1:原理: 异或用于比较两个二进制数的相应位,在执行按位"异或"运算时,如果两个二进制数的相应位都为1或者都为0,则返回0;如果两个二进制数的相应 ...
- Crypto++入门学习笔记(DES、AES、RSA、SHA-256)(加解密)
转自http://www.cppblog.com/ArthasLee/archive/2010/12/01/135186.html 最近,基于某些原因和需要,笔者需要去了解一下Crypto++库,然后 ...
- 哈希加密算法 MD5,SHA-1,SHA-2,SHA-256,SHA-512,SHA-3,RIPEMD-160 - aTool
一.MD5哈希加密算法 atool.org MD5即Message-Digest Algorithm 5(信息-摘要算法 5),用于确保信息传输完整一致.是计算机广泛使用的散列算法之一(又译摘要算法. ...
- c# .net sha256 16进制 64位 签名
public static string GetSHA256hash(string input, string _input_charset) { byte[] clearBytes = Encodi ...
- 各种语言HMAC SHA256实现
语言包含: Javascript ,PHP,Java,Groovy,C#,Objective C,Go,Ruby,Python,Perl,Dart,Swift,Rust,Powershell. Jav ...
- 摘要算法CRC8、CRC16、CRC32,MD2 、MD4、MD5,SHA1、SHA256、SHA384、SHA512,RIPEMD、PANAMA、TIGER、ADLER32
1.CRC8.CRC16.CRC32 CRC(Cyclic Redundancy Check,循环冗余校验)算法出现时间较长,应用也十分广泛,尤其是通讯领域,现在应用最多的就是 CRC32 算法,它产 ...
随机推荐
- 基于visual Studio2013解决C语言竞赛题之1050矩阵反斜线求和
题目 解决代码及点评 /************************************************************************/ /* 50 ...
- document.documentElement 和document.body 以及其属性
js中document.documentElement 和document.body 以及其属性 (原来HTML里是document.body --XHTML里是document.documentE ...
- truncate 和 delete 差异
truncate table players; 相当于 delete from players;要么 delete players from players; 要么 delete players.* ...
- EasyUI - DataGrid 组建 - [ 样式功能 ]
效果显示: 同上次博文效果. html代码: 同上次博文代码. js代码: align: 'center',//标题和内容居中 resizable: false,//不允许改变大小 //hidden: ...
- hdu 4117 GRE Words (ac自动机 线段树 dp)
参考:http://blog.csdn.net/no__stop/article/details/12287843 此题利用了ac自动机fail树的性质,fail指针建立为树,表示父节点是孩子节点的后 ...
- AIX用户管理
用户和组管理 /etc/passwd /etc/security/.profile /etc/security/limits /etc/security/passwd ...
- Linux改动文件权限记录
1.从文件类型上分可分为三种, 用ls-l查询,以"一"开头的是文件,以字母"d"开头的是文件夹(俗称文件夹),以字母"l"开头的是连接. ...
- JSP的学习(1)——基本知识与底层原理
通过之前的学习,我们已经对Servlet有所了解,现在我们先来学习JSP,当能使用JSP进行友好的页面显示之后,再回去学习Servlet的其他高级特性会将整个学习很好的融入进来. JSP,即Java ...
- Selenium WebDriver TestNg Maven Eclipse java 简单实例
环境准备 前提条件Eclipse 已经安装过 TestNg ,Maven 插件 新建一个普通的java项目 点击右键 configure->convert to Maven Project 之后 ...
- 关键部分CCriticalSection使用
类CCriticalSection的对象表示一个“临界区”,它是一个用于同步的对象,同一时刻仅仅同意一个线程存取资源或代码区.临界区在控制一次仅仅有一个线程改动数据或其他的控制资源时很实用.比如,在链 ...