BLAKE3(一种比MD5更加高效的校验方式)
1.BLAKE3 校验:
可以更好保证文件的唯一性,极难碰撞,计算速度极快。是一种兼顾安全和性能的校验方式。
2.1G文件计算速度对比
3.应用
https://github.com/BLAKE3-team/BLAKE3.git
4.linux虚拟机编译
#include "blake3.h"
#include <errno.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
int main(void) {
// Initialize the hasher.
blake3_hasher hasher;
blake3_hasher_init(&hasher);
// Read input bytes from stdin.
unsigned char buf[65536];
while (1) {
ssize_t n = read(STDIN_FILENO, buf, sizeof(buf));
if (n > 0) {
blake3_hasher_update(&hasher, buf, n);
} else if (n == 0) {
break; // end of file
} else {
fprintf(stderr, "read failed: %s\n", strerror(errno));
return 1;
}
}
// Finalize the hash. BLAKE3_OUT_LEN is the default output length, 32 bytes.
uint8_t output[BLAKE3_OUT_LEN];
blake3_hasher_finalize(&hasher, output, BLAKE3_OUT_LEN);
// Print the hash as hexadecimal.
for (size_t i = 0; i < BLAKE3_OUT_LEN; i++) {
printf("%02x", output[i]);
}
printf("\n");
return 0;
}
gcc -O3 -o example example.c blake3.c blake3_dispatch.c blake3_portable.c \
blake3_sse2_x86-64_unix.S blake3_sse41_x86-64_unix.S blake3_avx2_x86-64_unix.S \
blake3_avx512_x86-64_unix.S
5.linux虚拟机运行计算
wzh@wzh:~/work/BLAKE3/c$ ls -l 总计 1332 -rw-rw-r-- 1 wzh wzh 12452 3月 21 16:59 blake3_avx2.c -rw-rw-r-- 1 wzh wzh 66050 3月 21 16:59 blake3_avx2_x86-64_unix.S -rw-rw-r-- 1 wzh wzh 66735 3月 21 16:59 blake3_avx2_x86-64_windows_gnu.S -rw-rw-r-- 1 wzh wzh 65948 3月 21 16:59 blake3_avx2_x86-64_windows_msvc.asm -rw-rw-r-- 1 wzh wzh 54592 3月 21 16:59 blake3_avx512.c -rw-rw-r-- 1 wzh wzh 161672 3月 21 16:59 blake3_avx512_x86-64_unix.S -rw-rw-r-- 1 wzh wzh 91003 3月 21 16:59 blake3_avx512_x86-64_windows_gnu.S -rw-rw-r-- 1 wzh wzh 91605 3月 21 16:59 blake3_avx512_x86-64_windows_msvc.asm -rw-rw-r-- 1 wzh wzh 28903 3月 21 16:59 blake3.c -rw-rw-r-- 1 wzh wzh 108 3月 21 16:59 blake3-config.cmake.in drwxrwxr-x 4 wzh wzh 4096 3月 21 16:59 blake3_c_rust_bindings -rw-rw-r-- 1 wzh wzh 9165 3月 21 16:59 blake3_dispatch.c -rw-rw-r-- 1 wzh wzh 2901 3月 21 16:59 blake3.h -rw-rw-r-- 1 wzh wzh 12030 3月 21 16:59 blake3_impl.h -rw-rw-r-- 1 wzh wzh 13833 3月 21 16:59 blake3_neon.c -rw-rw-r-- 1 wzh wzh 5889 3月 21 16:59 blake3_portable.c -rw-rw-r-- 1 wzh wzh 21005 3月 21 16:59 blake3_sse2.c -rw-rw-r-- 1 wzh wzh 68858 3月 21 16:59 blake3_sse2_x86-64_unix.S -rw-rw-r-- 1 wzh wzh 71202 3月 21 16:59 blake3_sse2_x86-64_windows_gnu.S -rw-rw-r-- 1 wzh wzh 70982 3月 21 16:59 blake3_sse2_x86-64_windows_msvc.asm -rw-rw-r-- 1 wzh wzh 20813 3月 21 16:59 blake3_sse41.c -rw-rw-r-- 1 wzh wzh 61143 3月 21 16:59 blake3_sse41_x86-64_unix.S -rw-rw-r-- 1 wzh wzh 63459 3月 21 16:59 blake3_sse41_x86-64_windows_gnu.S -rw-rw-r-- 1 wzh wzh 63194 3月 21 16:59 blake3_sse41_x86-64_windows_msvc.asm -rw-rw-r-- 1 wzh wzh 1301 3月 21 16:59 blake3_tbb.cpp drwxrwxr-x 3 wzh wzh 4096 3月 21 16:59 cmake -rw-rw-r-- 1 wzh wzh 13364 3月 21 16:59 CMakeLists.txt -rw-rw-r-- 1 wzh wzh 1848 3月 21 16:59 CMakePresets.json drwxrwxr-x 3 wzh wzh 4096 3月 21 16:59 dependencies -rwxrwxr-x 1 wzh wzh 101888 3月 21 16:59 example -rw-rw-r-- 1 wzh wzh 868 3月 21 16:59 example.c -rw-rw-r-- 1 wzh wzh 1625 3月 21 16:59 example_tbb.c -rw-rw-r-- 1 wzh wzh 314 3月 21 16:59 libblake3.pc.in -rw-rw-r-- 1 wzh wzh 4043 3月 21 16:59 main.c -rw-rw-r-- 1 wzh wzh 2057 3月 21 16:59 Makefile.testing -rw-rw-r-- 1 wzh wzh 13644 3月 21 16:59 README.md -rwxrwxr-x 1 wzh wzh 3654 3月 21 16:59 test.py wzh@wzh:~/work/BLAKE3/c$ echo "Hello, World!" | ./example 6233834bce7817db1e401bceea2b8b45c1600115d25b51906c05ee32156b51c2 wzh@wzh:~/work/BLAKE3/c$ echo "Hello, World!" | ./example 6233834bce7817db1e401bceea2b8b45c1600115d25b51906c05ee32156b51c2 wzh@wzh:~/work/BLAKE3/c$
6.交叉编译
mips-linux-uclibc-gnu-gcc -O3 -o example example.c blake3.c blake3_dispatch.c blake3_portable.c -std=c99
7.交叉编译后运行
[root@mvt:kangshifu]# echo "Hello, World!" | ./example
6233834bce7817db1e401bceea2b8b45c1600115d25b51906c05ee32156b51c2
8.结论
1.虚拟机中C语言的使用编译后的空间占用很小,使用了汇编指令集优化,示例的占用为101888字节,即可以完成BLAKE3的计算。
2.嵌入式中C语言的使用编译后的空间占用更小,示例的占用为35137字节,即可以完成BLAKE3的计算。

浙公网安备 33010602011771号