异或运算:(B ^ A) ^ A = B ^ 0 = B
根据这个规律可设计出简单加密算法。
B为原始数据,A为密钥。
B与A进行异或得到密文。
将密文与A进行异或可以得到明文B。
对于不同的数据,有的数据可能需要加密,有的无须加密。不同数据之前可能采用的密钥不同。
定义结构体:
typedef struct _CIPHER {
u32 cipher_code; ///>解密key
u8 cipher_enable; ///>解密读使能
} CIPHER;
使用32位表示密钥,8位表示是否使能加解密。
这里可以根据不同数据来初始化密钥以及是否使能加密操作:
void cipher_init(CIPHER *pcipher, u32 key)
{
pcipher->cipher_code = key;//key初始化
cipher_ctl(pcipher, 0);//不使能解密
}
初始化后,默认是不进行加解密的。
通过控制函数来进行加解密的配置:
1表示使能加密
0表示禁止加密
static void cipher_ctl(CIPHER *pcipher, u8 ctl)
{
pcipher->cipher_enable = ctl;
}
该函数提供关闭加密功能:
void cipher_close(CIPHER *pcipher)
{
cipher_ctl(pcipher, 0);//不使能解密
}
这里采用按照4字节对齐的方式进行加解密。
addr % 4 = 0,使用ciphe