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

相关推荐
工藤新一¹17 小时前
Linux —— 虚拟进程地址空间
linux·运维·服务器·c/c++·虚拟进程地址空间
工藤新一¹2 天前
Linux —— 环境变量
linux·运维·服务器·环境变量·c/c++
青草地溪水旁3 天前
字符串格式化——`vsnprintf`函数
c/c++·格式化输出·字符处理
工藤新一¹4 天前
Linux2.6内核进程O(1)调度队列
linux·c/c++·linux2.6内核进程·调度队列算法
工藤新一¹7 天前
Linux 进程状态 — 僵尸进程
linux·僵尸进程·c/c++·进程状态
工藤新一¹7 天前
Linux 孤儿进程 (Orphan Process)
linux·孤儿进程·c/c++·orphan process
工藤新一¹8 天前
进程状态 —— Linux内核(Kernel)
linux·运维·服务器·c/c++·进程状态·linux内核(kernel)
工藤新一¹13 天前
C/C++ 数据结构 —— 树(2)
c语言·数据结构·c++·二叉树··c/c++
zaiyang遇见25 天前
【递归完全搜索】CCC 2008 - 24点游戏Twenty-four
算法·游戏·c/c++·全排列·信息学奥赛