通用轻量级密码/鉴权/ 秘钥算法(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 ********************************/
相关推荐
风月说与山鬼1 小时前
三、大括号语法
前端·react.js
kyriewen1 小时前
我把最常踩的8个CORS跨域报错整理了一遍——第8个去年还不存在
前端·javascript
Csvn2 小时前
🕰️ 闭包 + setTimeout 的 5 个经典陷阱:为什么定时器看到的永远不是最新的值?
前端
lilian2332 小时前
Harmony os 技术实战|拼豆制图27:用单字符编码承载 50 张 70×70 图纸
前端·数据库·华为·harmonyos
CarIise3 小时前
CSS选择器与样式关联
前端·css·tensorflow
里欧跑得慢4 小时前
CSS 模块化架构的演进:BEM、CSS Modules 到 CSS-in-JS 的反思
前端·css·flutter·web·css-in-js
IT_陈寒4 小时前
Vue的computed属性把我坑惨了,原来我一直用错姿势
前端·人工智能·后端
小灰灰搞电子5 小时前
Rust+Slint 实现温度计源码分享
前端·rust·slint
计算机魔术师5 小时前
面壁智能 OpenBMB 推出 MathForm,面向 Lean 4 数学自动形式化的开源框架、数据集与模型
前端