我以前从未见过加密.这个C加密代码片做了什么?

pro*_*don 1 c encryption

几个星期前我被给了一些代码作为我感兴趣的加密工作的一部分.他们给我发了一个代码,基本上想看看我是否理解它并且可以改进它.

我尽我所能,但所有代码对我来说都是全新的,我无法弄清楚它做了什么.我最终放弃了它作为一个失败的原因,因为我有其他事情要做.但是,为了知识,我仍然对学习它很感兴趣.任何人都可以帮助我了解更多关于这种类型的编程或具体是什么?

我会尽力减少它并给我留下印象.

这是进行实际加密的部分; 从我可以弄清楚,使用XOR加密.它是否正确?我也相信input_2和input_1被错误地切换了.

typedef int int32;
typedef char int8;

void change_it(int8 *output, int8 *input_1, const int8 *input_2, int32 length)
{
    int32 i = 0;

    for(i=0; i<length; i++)
    {
        output[i] = (int8)(input_1[i] ^ input_2[i]);
    }
    return;
}
Run Code Online (Sandbox Code Playgroud)

在这里,他们重载了一个itoa使字符串成十进制或十六进制数字,虽然出于何种目的我不确定.

void itoa( int32 num, int8  *alpha, int32 radix )
{
    if( radix == 10 )
    {
        sprintf(alpha, "%i", num);
    }
    else if( radix == 16 )
    {
        sprintf(alpha, "%X", num);
    }
}
Run Code Online (Sandbox Code Playgroud)

这是主要调用的主要运行功能.它做了一些奇怪的按位,然后调用change_it 4次.这是大部分困扰我的部分.

int8 *modify_it(int32 modifier, const int8  *input_1, int32 length)
{
    int8  leading[3];
    int32 i_leading;
    int8 * temp_string = NULL;
    int8 * ret;
    int32 i = 0;

    itoa(modifier/2, leading, 10);
    i_leading = atoi(leading);

    temp_string = (int8 *) malloc(8);
    ret = (int8 *) malloc(length);
    memset(temp_string, 0, 8);
    temp_string[0] = 0;

    if( (modifier+1)%2 == 0 ) {
        temp_string[0] = (int8)((i_leading<<4) + 8);
    }
    else {
        temp_string[0] = (int8)(i_leading<<4);
    }

    for(i=0; i<(length>>3); i++)
    {
        change_it(ret+i*8, temp_string, input_1+i*8, 8);
    }
    free(temp_string);

    return ret;
}
Run Code Online (Sandbox Code Playgroud)

最后,但最重要的是,启动它的主要功能.

int main(int argc, char **argv) {

    int8 data[32];
    memset(data, 0x0A, sizeof(data));

    int8 *resp = modify_it(0xFF, data, sizeof(data));

    free(resp);
    system("PAUSE");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

std*_*ave 5

这基本上是 - 为了更好的术语 - 混淆了输入.

这是一个非常业余的尝试,一个人在保护和存储数据方面都会失败.

存在许多错误,例如清除数组(可能在使用calloc分配期间完成),然后通过"手动"清除部分错误来"确保"再次清除它.这有很多很多错误,这让我想要嘲笑和笑.

如果这不是作业,请扔掉它.不要试图从中吸取教训.这段代码没有任何正确或好处.