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 的计算

相关推荐
垆边人似月.3 天前
RDMA项目踩坑(一):为什么最后一块数据必须使用实际长度?
网络·c/c++·rdma·高性能io·tcp与rdma
行者-全栈开发3 天前
【鸿蒙心迹】三方库移植(一)——NAPI 把 C/C++ 库桥接到 ArkTS 的完整链路(HarmonyOS 7.x)
harmonyos·arkts·交叉编译·c/c++·napi·三方库移植
2601_9555181812 天前
36. 跨语言:C/C++与Swift&Objective-C混合编程(一)
objective-c·swift·c/c++·混合编程·跨语言
daidaidaiyu20 天前
浅谈 C++ 中的接口、纯虚函数与虚析构函数
c/c++
YYYing.1 个月前
【设计模式系列 (九) 】装饰器模式
c++·后端·设计模式·装饰器模式·c/c++
YYYing.1 个月前
【设计模式系列 (八) 】组合模式
c++·后端·设计模式·组合模式·c/c++
YYYing.1 个月前
【设计模式系列 (五) 】原型模式
开发语言·后端·设计模式·原型模式·c/c++
YYYing.1 个月前
【设计模式系列 (四) 】建造者模式
c++·后端·设计模式·建造者模式·c/c++
YYYing.2 个月前
【C++进阶系列 (七)】C++ RTTI 深度剖析:从 typeid 到 dynamic_cast 的底层之旅
开发语言·c++·c/c++·rtti
捷瑞电子工坊2 个月前
VSCode的配置和一些报错问题
vscode·ubuntu·c/c++·编译报错·开发环境配置·初学者教程·json配置