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

相关推荐
charlee4410 天前
C++代码改造为UTF-8编码问题的总结
字符编码·utf-8·c/c++
深度Linux18 天前
探秘Linux IO虚拟化:virtio的奇幻之旅
linux·c/c++·virtio·虚拟化技术
laugh1232125 天前
性能飞跃!TensorRT-YOLO 6.0 全面升级解析与实战指南
环境配置·tensorrt·cuda·c/c++
monstercl1 个月前
Ubuntu20彻底删除MySQL8
sql·mysql·ubuntu·c/c++
我想学LINUX1 个月前
【2024年华为OD机试】(B卷,100分)- 组成最大数 (Java & JS & Python&C/C++)
java·c语言·javascript·python·华为od·c/c++
浮梦终焉2 个月前
_使用CLion的Vcpkg安装SDL2,添加至CMakelists时报错,编译报错
报错·c/c++·sdl2
彬sir哥2 个月前
VScode 只能运行c,运行不了c++的解决问题
vscode·c/c++
laugh123212 个月前
TensorRT-YOLO:灵活易用的 YOLO 部署工具
tensorrt·模型部署·c/c++·模型加密
charlee442 个月前
CMake构建学习笔记19-OpenSSL库的构建
ssl·cmake·c/c++·构建