通用轻量级密码/鉴权/ 秘钥算法(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 ********************************/
相关推荐
程序员海军29 分钟前
用了两年多 GPT,我最近开始换模型了,还折腾了个求职避坑 Agent
前端·人工智能·后端
zttbee1 小时前
echarts图表tooltip色块失效
前端·javascript·echarts
excel2 小时前
IndexNow:让搜索引擎更快发现网站更新的主动通知协议
前端·后端·架构
子兮曰3 小时前
CSS 复现 23 种设计风格:从拟物到液态玻璃的成本阶梯与兜底写法【实战】
前端·css·视觉设计
虚无境3 小时前
如何用AI帮我写出实用的插件
前端·javascript·ai编程
柳杉4 小时前
从数字化到数智化:3D 可视化大屏的下一个五年
前端·ai编程·数据可视化
风骏时光牛马5 小时前
从零到实战:AI全栈学习进阶路线
前端
FRing035 小时前
JavaScript入门到精通二十六(变量提升、函数剩余参数、展开运算符、ES6箭头函数)
开发语言·前端·javascript·es6·箭头函数
用户360055579005 小时前
Kestrel_VLLM - 15 · decode 优化四连击:19ms → 8ms
前端
IT_陈寒5 小时前
JavaScript的闭包陷阱,这个坑我躺了三天才爬出来
前端·人工智能·后端