I've never seen encryption before. What does this C encryption snippet do?
几周前,我收到了一些代码,作为我感兴趣的加密工作应用程序的一部分。他们给我发了一个代码,基本上想看看我是否理解它,是否可以改进它。
我尽了最大努力,但所有的代码对我来说都是全新的,我不知道它做了什么。我最终放弃了这项事业,因为我还有其他事情要做。然而,我仍然对学习它很感兴趣,只是为了知识。有人能帮我了解更多关于这种编程的知识吗?或者具体来说,这有什么作用?
我会尽量把它剪下来给你留下印象。
这是执行实际加密的部分;从我可以了解到的情况来看,使用XOR加密。这是正确的吗?我还认为输入_2和输入_1被错误地切换。
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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; } |
在这里,他们重载了一个
1 2 3 4 5 6 7 8 9 10 11 |
这是main调用的主运行函数。它做了一些奇怪的位操作,然后调用change-it 4次。这是最令我头疼的部分。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | 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; } |
最后,但绝不是最不重要的,启动它的主要功能。
1 2 3 4 5 6 7 8 9 10 11 |
基本上,它的作用是——为了更好的术语——模糊输入。
这是一个非常不专业的尝试,在安全和存储数据方面都会非常失败。
有很多错误,比如清除一个数组(在使用calloc分配的过程中可能已经完成了),然后通过"手动"清除其中的一部分来"确保"它再次被清除。这有太多,太多的问题了,这让我既想吐又想笑。
如果这不是家庭作业,把它扔掉。不要试图从中学习。这段代码没有正确或好的地方。
在许多层面上,对代码进行批判。
等。
总之,"忽略此代码"建议是合理的。但是,发送给您的公司可能完全意识到它是垃圾。他们想看看你会遇到什么问题,你会如何分析它,如果你提供了补救措施,你会提供什么补救措施。
把它当作一段简单的坏C代码;这样分析它。如果你有足够的知识去做的话,一定要密切关注一些事情,但是即使你对加密不太了解,也有很多事情需要批评。
1 2 3 4 5 6 7 8 9 | Before: 0x0000: 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A ................ 0x0010: 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A ................ After: 0x0000: F2 0A 0A 0A 0A 0A 0A 0A F2 0A 0A 0A 0A 0A 0A 0A ................ 0x0010: F2 0A 0A 0A 0A 0A 0A 0A F2 0A 0A 0A 0A 0A 0A 0A ................ Decrypt: 0x0000: 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A ................ 0x0010: 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A ................ |