通用轻量级密码/鉴权/ 秘钥算法(C语言)

crypto.h

cpp 复制代码
/** @copyright  Copyright (c) 2025 Craftsman In Jianghu. All rights reserved.
  ******************************************************************************
  * @file       crypto.h
  * @brief      通用轻量级密码/鉴权算法库 头文件
  * @details    包含XorShift32、S盒非线性、Feistel网络轻量级算法
  *             适用于车载/工控/物联网等全MCU平台,无硬件依赖,编译器自动裁剪未使用函数
  *
  * @author     匠在江湖(0001)
  * @version    V01.00
  * @date       2025-05-08
  ******************************************************************************
  * @attention
  *
  * @par 修改日志:
  * | 版本   | 日期       | 作者(ID)        | 说明     |
  * |--------|------------|-----------------|----------|
  * | V01.00 | 2025-05-08 | 匠在江湖(0001)  | 创建初版 |
  ******************************************************************************
  */


#ifndef CRYPTO_H_
#define CRYPTO_H_
/* Includes *******************************************************************/
#include <stdint.h>

#ifdef __cplusplus
 extern "C"{
#endif
/* Exported types *************************************************************/
typedef uint16_t    SEED_T;  // 种子数据类型
typedef uint16_t    CODE_T;  // 校验/授权码类型
typedef uint32_t    OUT_T;   // 算法输出结果类型

/* Exported constants *********************************************************/
/* Exported macro *************************************************************/
/* Exported functions *********************************************************/
/**
  * @brief  XorShift32伪随机数扰动算法
  * @param  seed: 输入随机种子
  * @param  code: 输入校验/授权码
  * @return 算法计算结果
  */
extern OUT_T XorShift32Crypto(SEED_T seed, CODE_T code);

/**
  * @brief  S盒查表+非线性变换算法
  * @param  seed: 输入随机种子
  * @param  code: 输入校验/授权码
  * @return 算法计算结果
  */
extern OUT_T SBoxCrypto(SEED_T seed, CODE_T code);

/**
  * @brief  自定义Feistel分组网络算法
  * @param  seed: 输入随机种子
  * @param  code: 输入校验/授权码
  * @return 算法计算结果
  */
extern OUT_T FeistelCrypto(SEED_T seed, CODE_T code);

#ifdef __cplusplus
}
#endif

#endif /* CRYPTO_H_ */

/********************************* END OF FILE ********************************/

crypto.c

cpp 复制代码
/** @copyright  Copyright (c) 2025 Craftsman In Jianghu. All rights reserved.
  ******************************************************************************
  * @file       crypto.c
  * @brief      通用轻量级密码/鉴权算法库 源文件
  * @details    纯C实现,体积极小,无硬件依赖,适配全平台MCU
  *
  * @author     匠在江湖(0001)
  * @version    V01.00
  * @date       2025-05-08
  ******************************************************************************
  * @attention
  *
  * @par 修改日志:
  * | 版本   | 日期       | 作者(ID)        | 说明     |
  * |--------|------------|-----------------|----------|
  * | V01.00 | 2025-05-08 | 匠在江湖(0001)  | 创建初版 |
  ******************************************************************************
  */


/* Includes *******************************************************************/
#include "crypto.h"

/* Private typedef ************************************************************/
/* Private constants **********************************************************/
// S盒非线性替换表(可自定义修改数值,提高安全性)
#define SBOX_SIZE       16U
static const uint8_t sBox[SBOX_SIZE] = {
    0x03, 0x0E, 0x07, 0x0C, 0x0D, 0x0A, 0x08, 0x0F,
    0x00, 0x02, 0x0B, 0x05, 0x09, 0x01, 0x06, 0x04
};

/* Private macro **************************************************************/
/* Private variables **********************************************************/
/* Private function prototypes ************************************************/


/**
  ******************************************************************************
  * @brief  XorShift32伪随机数扰动算法
  * @param  seed: 输入随机种子
  * @param  code: 输入校验/授权码
  * @return 算法计算结果
  * @note   标准伪随机算法,随机性优异
  ******************************************************************************
  */
OUT_T XorShift32Crypto(SEED_T seed, CODE_T code)
{
    uint32_t val = seed;
    // XorShift32核心扰动运算
    val ^= val << 13U;
    val ^= val >> 17U;
    val ^= val << 5U;
    // 与授权码异或输出
    val ^= code;
    return val;
}

/**
  ******************************************************************************
  * @brief  S盒查表+非线性变换算法
  * @param  seed: 输入随机种子
  * @param  code: 输入校验/授权码
  * @return 算法计算结果
  * @note   非线性替换+位扩散,量产通用首选
  ******************************************************************************
  */
OUT_T SBoxCrypto(SEED_T seed, CODE_T code)
{
    uint16_t temp;
    // 种子按4位分段,进行S盒非线性替换
    temp  = (uint16_t)sBox[seed & 0x0F] << 12U;
    temp |= (uint16_t)sBox[(seed >> 4U) & 0x0F] << 8U;
    temp |= (uint16_t)sBox[(seed >> 8U) & 0x0F] << 4U;
    temp |= (uint16_t)sBox[(seed >> 12U) & 0x0F];

    // 位运算扩散,提高混淆度
    temp ^= (temp << 5U) ^ (temp >> 3U);
    // 与授权码异或
    temp ^= code;
    return (OUT_T)temp;
}

/**
  ******************************************************************************
  * @brief  自定义Feistel分组网络算法
  * @param  seed: 输入随机种子
  * @param  code: 输入校验/授权码
  * @return 算法计算结果
  * @note   轻量级分组密码结构,安全性较高
  ******************************************************************************
  */
OUT_T FeistelCrypto(SEED_T seed, CODE_T code)
{
    // 将16位种子分为高低8位两组
    uint8_t left  = (uint8_t)(seed >> 8U);
    uint8_t right = (uint8_t)(seed & 0xFFU);
    uint8_t temp;
    const uint8_t rounds = 2U;  // 轻量级加密轮数

    // Feistel两轮加密运算
    for (uint8_t i = 0U; i < rounds; i++)
    {
        // 轮函数:非线性运算
        temp = (uint8_t)((right * 3U + code) ^ 0x1AU);
        left ^= temp;

        // 左右分组数据交换
        temp  = left;
        left  = right;
        right = temp;
    }
    // 合并分组结果输出
    return (OUT_T)((left << 8U) | right);
}

/********************************* END OF FILE ********************************/
相关推荐
Web打印14 小时前
2027年Web打印的几种方法
前端·pdf·web
喵了几个咪14 小时前
吃透后台权限系统:从架构设计到 Vue3/React 双框架完整落地
前端·vue.js·react.js·权限系统
夜雪闻竹14 小时前
Tailwind CSS v4 + Vite:现代前端样式方案
前端·css·ai
Aerfajj14 小时前
React18的边学边记
前端·react.js
ZC跨境爬虫14 小时前
跟着 MDN 学CSS day_27:(处理不同方向的文本)
前端·javascript·css·ui·html
qcx2314 小时前
【系统学AI】08 Plan-then-Execute范式:先想好再做,比ReAct强在哪
前端·人工智能·react.js·ai·react·plan execute
雨季mo浅忆14 小时前
Claude Code_小白版
前端·职场和发展
喵了几个咪14 小时前
统一范式:中后台Admin项目标准化API分层开发方案(Vue/React通用)
前端·vue.js·react.js·protobuf
TE-茶叶蛋14 小时前
GitNexus Web深度模块分析
前端·知识图谱