C/C++ 关于 SHA256 的使用

如下图,是关于 SHA256 使用的一个经典例子

c 复制代码
#include <openssl/sha.h>
#include <stdio.h>
#include <string.h>

int main() {
    char data[] = "Hello, world!"; // 要计算哈希的数据
    unsigned char hash[SHA256_DIGEST_LENGTH]; // 用于存储哈希结果的缓冲区

    SHA256_CTX sha256;
    SHA256_Init(&sha256);
    SHA256_Update(&sha256, data, strlen(data));
    SHA256_Final(hash, &sha256);

    printf("SHA-256 哈希值:");
    for(int i = 0; i < SHA256_DIGEST_LENGTH; i++) {
        printf("%02x", hash[i]);
    }
    printf("\n");

    return 0;
}

用来做哈希的数据除了可以是 "char [] 数组 / 字符串" 外,还可以是 int 数组,如下

c 复制代码
#include <openssl/sha.h>
#include <stdio.h>
#include <string.h>

int main() {

    // char data[] = "Hello, world!"; // 要计算哈希的数据
    
    int data[] = {1, 2, 3, 0, 4, 5, 6, 7}; // 要计算哈希的数据
    int counter = 8;
    unsigned char hash[SHA256_DIGEST_LENGTH]; // 用于存储哈希结果的缓冲区

    SHA256_CTX sha256;
    SHA256_Init(&sha256);
    SHA256_Update(&sha256, data, counter * 4);
    SHA256_Final(hash, &sha256);

    printf("SHA-256 哈希值:");
    for(int i = 0; i < SHA256_DIGEST_LENGTH; i++) {
        printf("%02x", hash[i]);
    }
    printf("\n");

    return 0;

}

如果我们不增加 counter,仅仅增加 int data[] 数组的长度和内容,那么计算出的哈希值是完全一样的。

在增加 int data[] 数组的长度和内容的同时,必须也要增加 counter,才可以得到不一样的哈希值。

这个过程中,0 数值并不会破坏 SHA256 的计算

相关推荐
沐风_ZTL3 天前
在RK3588上使用哪个流媒体服务器合适
运维·服务器·rk3588·c/c++·流媒体服务器
沐风_ZTL5 天前
ZLMediaKit流媒体服务器
运维·服务器·音视频·rk3588·c/c++·流媒体服务器
做人求其滴13 天前
蓝桥杯C/C++省赛/国赛注意事项及运行环境配置
算法·蓝桥杯·编译器·c/c++·算法竞赛·运行环境·第十六届
水木姚姚16 天前
vscode+wsl 运行编译 c++
linux·windows·vscode·ubuntu·wsl·c/c++
Hi202402171 个月前
基于ltrace的linux自定义函数耗时统计方法
linux·调试·性能分析·c/c++
xiecoding.cn1 个月前
C语言和C++到底有什么关系?
c语言·开发语言·c++·c/c++·c语言入门
星夜钢琴手1 个月前
C/C++ 实现由用户通过键盘输入自然数并判断其是不是素数(带清空缓冲区等考虑)
c语言·开发语言·c++·c/c++
RainbowC01 个月前
C/C++ GOTO妙用
c/c++
Uzuki2 个月前
Vulkan环境配置 | vscode+msvc 解决方案
vscode·游戏开发·图形学·c/c++
深度Linux2 个月前
深入探讨Ceph:分布式存储架构的未来
分布式·ceph·架构·c/c++