一种简单的,适合单片机的,数据加密解密方法,仅需要调用两个函数即可完成数据的加密解密

一种简单的,适合单片机的,数据加密解密方法,仅需要调用两个函数即可完成数据的加密解密

本人原创,源码可移步:https://gitee.com/demyli/easy-encrypt.git

/******************************************

    文件说明:  一种简单的加密解密算法
    作    者:  DemyLi
    修改日期:  2022-5-5

加密解密思想:
    适配MCU算力,简化计算,不做复杂加密及解密算法

加密要素:当前加密对象A、其序列偏移P、密码本S
解密要素:当前已加密值B、其序列偏移P、密码本S

对数据A加密公式及说明:S[P] ^ [A+P] = B
                第1步: A值,加上,偏移量P,的和
                第2步:这个和,异或,密码本S在偏移P的值

对数据B解密公式及说明:B ^ S[p] - P = A
                加密逆运算

注意:
    1.加密公式及密码本不在协议中公开
    2.偏移P仅设16位,取值[0-F],超长后实际偏移取余0x0F
******************************************/

/*************头 文 件********************/
#include <stdio.h>
#include <stdint.h>

/宏 定 义*******/

/参数定义*******/

//密码本,可自行设定替换长度为15的密码字符

const char* CodeBook = "tY[ztM]CodEBoOk";

加密函数

/*******************************************************
函数功能:加密函数
输入参数:待加密数据,待加密数据长度
输出参数:直接替换待加密数据
函数说明:无
*******************************************************/
void codebook_encrypt(uint8_t *data, uint32_t len)
{
    uint8_t encryptDara;
    uint32_t posIndex = 0;
    uint32_t posIndexF = 0;

    //循环加密  S[P] ^ [A+P] = B
    for (posIndex = 0; posIndex < len; posIndex++)
    {
        posIndexF = posIndex % 0x0F;

        encryptDara = data[posIndex] + posIndex;
        data[posIndex] = CodeBook[posIndexF] ^ encryptDara;
    }
}

解密函数

/*******************************************************
函数功能:解密函数
输入参数:待解密数据,待解密数据长度
输出参数:直接替换原始数据
函数说明:无
*******************************************************/
void codebook_decrypt(uint8_t *data, uint32_t len)
{
    uint8_t encryptDara;
    uint32_t posIndex = 0;
    uint32_t posIndexF = 0;

    //循环解密  B ^ S[p] - P = A
    for (posIndex = 0; posIndex < len; posIndex++)
    {
        posIndexF = posIndex % 0x0F;

        encryptDara = CodeBook[posIndexF] ^ data[posIndex];
        data[posIndex] = encryptDara - posIndex;
    }
}

使用说明

共两个函数,其中codebook_encrypt为加密函数,codebook_decrypt为解密函数。

uint8_t testdata[22] = {1,2,3,4,5,6,7,8,9,0,0xA,0xB,0xC,0xD,0xE,0xF,0,0xb,0xc,0xd,0xe,0xf};

/*******************************************************
函数功能:测试代码
输入参数:
输出参数:
函数说明:
*******************************************************/
void codebook_test(void)
{
    codebook_encrypt(testdata,22);
    codebook_decrypt(testdata,22);
}

int main () 
{
    codebook_test();
	return 0;
}
  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值