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的计算。
posted @ 2025-04-18 11:28  Smah  阅读(15)  评论(0)    收藏  举报