跳到主要内容

SHA-256哈希 (sha256)

SHA-256 安全哈希算法,256 位摘要计算。提供一次性计算和流式更新两种接口。

常量与数据结构

#define SHA256_DIGEST_SIZE (32)

struct sha256_ctx_t {
uint64_t count;
uint8_t buf[64];
uint32_t state[8];
};

API

一次性计算

const uint8_t * sha256_hash(const void * data, int len, uint8_t * digest);
  • data — 输入数据
  • len — 数据长度
  • digest — 输出 32 字节摘要

返回 digest 指针。

流式更新

void sha256_init(struct sha256_ctx_t * ctx);
void sha256_update(struct sha1_ctx_t * ctx, const void * data, int len);
const uint8_t * sha256_final(struct sha256_ctx_t * ctx);
  • sha256_init — 初始化上下文
  • sha256_update — 追加数据,可多次调用
  • sha256_final — 完成计算,返回摘要指针(指向上下文内部缓冲区)

使用示例

一次性计算

uint8_t msg[] = { 'x', 'b', 'o', 'o', 't' };
uint8_t digest[SHA256_DIGEST_SIZE];
sha256_hash(msg, sizeof(msg), digest);
/* digest = 0xa81a87bd a68abf88 8b64aa20 c6cf204b
91889afa 1a8506b1 e4125acb 372edb0d */

流式更新

struct sha256_ctx_t ctx;
uint8_t digest[SHA256_DIGEST_SIZE];

sha256_init(&ctx);
sha256_update(&ctx, chunk1, len1);
sha256_update(&ctx, chunk2, len2);
sha256_final(&ctx);