几周前我收到了一些密码 作为我感兴趣的加密工作申请的一部分 他们给了我一个密码
我尽我最大的努力,但所有的代码对我来说都是全新的,我无法理解它做了什么。我最终放弃了它,因为我还有其他事情要做。然而,我仍然非常有兴趣学习它,仅仅为了知识。有谁能帮助我更多地了解这种类型的编程,或者具体地说这是做什么的呢?
我会试着把它剪下来 给自己留下印象
这是真正加密的部分; 根据我可以用 XOR 加密的方法可以找到的。 这是否正确? 我还认为输入_ 2 和输入_ 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;
}
在这里,他们超载了一个 itoa
,使字符串变成小数或十六进制数字,尽管出于什么目的我不确定。
void itoa( int32 num, int8 *alpha, int32 radix )
{
if( radix == 10 )
{
sprintf(alpha, "%i", num);
}
else if( radix == 16 )
{
sprintf(alpha, "%X", num);
}
}
这是主调的主要运行函数。 它会做一些怪异的比特奇特的东西, 然后调用更改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;
}
最后,但绝非最不重要的是, 启动它的主要函数 。
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;
}