# sm3_c **Repository Path**: Jack2021/sm3_c ## Basic Information - **Project Name**: sm3_c - **Description**: SM3散列算法 C实现 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 2 - **Created**: 2025-06-24 - **Last Updated**: 2025-07-07 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # SM3散列算法实现 国密SM3散列算法C和C++实现 ## C版本 ### 一次性计算 ```c void sm3_once_calcu(unsigned char *m, size_t bytes_length, unsigned char digest[32]); ``` ### 可追加计算 ```c sm3_t hash_body; void sm3_init(sm3_t *hash_body); void sm3_update(sm3_t *hash_body, unsigned char *m, size_t bytes_length); void sm3_digest(sm3_t *hash_body, unsigned char digest[32]); ``` ### 辅助函数 ```c void sm3_hexdigest(unsigned char digest[32], char hexdigest[64]); ``` ## C++版本 ### 头文件 ```cpp #include "sm3.hpp" ``` ### 一次性计算 ```cpp // 返回16进制字符串 std::string hash = sm3::Hash::computeHex(data, length); // 返回原始字节 uint8_t digest[32]; sm3::Hash::compute(data, length, digest); ``` ### 流式计算 ```cpp sm3::Hash hash; hash.update(data1, length1); // 添加第一部分数据 hash.update(data2, length2); // 添加更多数据 // 获取16进制结果 std::string result = hash.hexdigest(); // 获取原始字节结果 uint8_t digest[32]; hash.digest(digest); ``` ## 构建和运行 ### 构建脚本使用 ```bash # 编译并运行测试 ./build_and_run.sh test # 仅编译 ./build_and_run.sh build # 清理生成文件 ./build_and_run.sh clean ``` ### 构建要求 - GCC 4.8+ 或 Clang 3.4+ 编译器 - 支持C++11标准 - Linux/macOS环境 ## 示例输出 成功运行测试程序将输出如下结果: ``` Test once: 66c7f0f462eeedd9d1f2d46bdc10e4e24167c4875cf2f7a2297da02b8f4ba8e0 Test stream: 66c7f0f462eeedd9d1f2d46bdc10e4e24167c4875cf2f7a2297da02b8f4ba8e0 Test chunked: 66c7f0f462eeedd9d1f2d46bdc10e4e24167c4875cf2f7a2297da02b8f4ba8e0 ... ``` ## 注意事项 1. C++版本需要C++11支持 2. 测试用例验证了三种不同长度的输入 3. 支持分块计算大文件