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

相关推荐
huangyuchi.4 天前
【Linux 网络】理解并应用应用层协议:HTTP(附简单HTTP服务器C++代码)
linux·服务器·网络·网络协议·http·c/c++
huangyuchi.8 天前
【Linux网络】深入理解守护进程(Daemon)及其实现原理
linux·运维·服务器·c/c++·守护进程·会话·进程组
好评12411 天前
C/C++ 内存管理:摆脱野指针和内存泄漏
开发语言·c++·内存管理·c/c++
阿捏利14 天前
详解ELF文件(三)程序头表
c/c++·linux编程·elf文件
吃西瓜的星星15 天前
从0开始完成ActiveMQ-cpp在windows_x86平台的编译(从编译openssl开始)
activemq·openssl·c/c++
_OP_CHEN16 天前
【Linux系统编程】(十)从入门到精通!Linux 调试器 gdb/cgdb 超全使用指南,程序员必备调试神器
linux·运维·c/c++·linux开发工具·调试器·gdb/cgdb
橘颂TA24 天前
【剑斩OFFER】算法的暴力美学——判定字符是否唯一
算法·c/c++·结构与算法
橘颂TA1 个月前
【剑斩OFFER】算法的暴力美学——矩阵区域和
算法·c/c++·结构与算法
橘颂TA1 个月前
【剑斩OFFER】算法的暴力美学——二维前缀和
算法·c/c++·结构与算法
橘颂TA1 个月前
【剑斩OFFER】算法的暴力美学——寻找峰值
数据结构·算法·力扣·c/c++