sha256 算法


sha256是一种密码散列函数,说白了它就是一个哈希函数。对于任意长度的消息,SHA256都会产生一个256bit长度的散列值,称为消息摘要,可以用一个长度为64的十六进制字符串表示。sha256是SHA-2下细分出的一种算法。SHA-2下又可再分为六个不同的算法标准,包括了:SHA-224、SHA-256、SHA-384、SHA-512、SHA-512/224、SHA-512/256

在线测试网站 : https://tool.oschina.net/encrypt?type=2

sha256的安全性如何?

sha256非常安全,因为获得相同哈希值的唯一方法是输入相同的文件或字符串。即使是一个小的调整也会完全改变输出。这就是sha256如此安全的原因。 举例子:

1
2
3
4
5
6
7
输入:Bye1
得到的结果:
741a03a10f3de6b2eb81985d06b70f549e762d2e9a1895c5156ffc5e10ffde33

输入:bye1
得到的结果:
d828103bd4740f22982794b6bd394839dd73f894280a631ba7e3e7e38a42c2e8

sha256算法是否可逆

因为sha256是一个确定的单向哈希函数,因此sha256是不可逆的。也就是说,它是个数学函数,接受任意大小的输入,但返回固定大小的输出,就像文件或字符串的数字指纹。它是确定性的,因为相同的输入总是产生相同的输出。

代码

https://github.com/xboot/xboot/blob/master/developments/mkz/sha256.c
https://github.com/xboot/xboot/blob/master/src/include/sha256.h

测试代码

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
#include <stdio.h>
#include "sha256.h"


void out_hex_string(char *info, uint8_t *buf, uint32_t size)
{
printf("%s : \r\n", info);
for (int i = 0; i < size; i++) {
printf("%02x ", buf[i]);
}
printf("\r\n");
}


int main(int argc, char **argv)
{
char use_data[10] = "test";
uint8_t sha256[SHA256_DIGEST_SIZE];

sha256_hash(use_data, strlen(use_data), sha256);
out_hex_string("sha256", sha256, sizeof(sha256));

return 0;
}