who4who 发表于 2019-8-16 01:21

该加密算法的名称

本帖最后由 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);
}

who4who 发表于 2019-8-22 09:01

这是RC4算法。
页: [1]
查看完整版本: 该加密算法的名称