一种简单的,适合单片机的,数据加密解密方法,仅需要调用两个函数即可完成数据的加密解密
本人原创,源码可移步: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;
}