该加密算法的名称
本帖最后由 who4who 于 2019-8-22 09:01 编辑我在三个程序中碰到了该加密算法,它应该是一种有名字的加密算法,但我不知道它叫什么名字。
下面是我重建的代码。请各位帮看一看,该算法名称是什么?
#include <stdint.h>
#include <string.h>
typedef struct {
int head;
int body;
} box_t;
/**
*@brief扩展密钥,初始化盒
*@param pb 密盒指针
*@paramp_key 密钥指针
*@paraml_key 密钥长度
*/
static void InitKeyBox(box_t *pb, const uint8_t *p_key, size_t l_key) {
{ // 初始化得 {{0,0}, {0,1,...,255}}
pb->head = 0;
pb->head = 0;
for (int i = 0; i < 256; ++i)
pb->body = i;
}
{ // 乱序 pb->body[]
int x = 0;// 下标于 pb->body[]
int k = 0;// 下标于 p_key[]
for (int i = 0; i < 256; ++i) {
int bi = pb->body;
x = (uint8_t)(bi + p_key + x);// 算出另一处
pb->body = pb->body;
pb->body = bi;// 交换 i 和 x 两处
k = (k + 1 < l_key ? k + 1 : 0);// k 循环下移
}
}
}
/**
*@brief用密盒异或处理数据
*@parampb 密盒指针
*@paramp_dat 数据缓冲
*@param l_dat 数据长度
*/
static void XorWithBox(box_t *pb, uint8_t *p_dat, size_t l_dat) {
int x = pb->head;
int y = pb->head;
for (size_t i = 0; i < l_dat; ++i) {
int dx, dy;
// 准备下标
x = (uint8_t)(x + 1);
y = (uint8_t)(y + pb->body);
// 准备数据
dx = pb->body;
dy = pb->body;
// 交换 x 和 y 两处
pb->body = dy;
pb->body = dx;
// 异或
p_dat ^= pb->body[(uint8_t)(dx + dy)];
}
pb->head = x;
pb->head = y;
}
/**
*@brief加密或解密数据
*@param p_key 密钥
*@paramp_dat 数据缓冲
*@param l_dat 数据长度
*/
void UnknownAlgorithm(const char *p_key, uint8_t *p_dat, size_t l_dat) {
box_t box = {0};
InitKeyBox(&box, (const uint8_t *)p_key, strlen(p_key));
XorWithBox(&box, p_dat, l_dat);
}
这是RC4算法。
页:
[1]