尝试使用解密时间解密代码

时间:2018-11-08 09:14:30

标签: c encryption

不久前,我了解到,如果代码验证循环如下所示,则可以使用以下方法对代码进行解密:

char *code, *user_input;         /* assume the pointers are pointing valid data */
while(*code++ == *user_input++); /* go over char by char */
printf((*p == '\n' && q == code + strlen(code)) ? "ok\n" : "fail\n");       

如果这是代码验证循环,那么我可以提供输入,并检查循环返回 fail 会花费多少时间。如果花了X个时钟周期,我就在第一个字符处,在第二个字符处-在第二个字符处也是如此,依此类推...

隐藏这种类型的循环所引起的数据的方法是增加延迟,限制用户输入(不能蛮力)或反过来遍历整个循环。

#include <stdio.h>
#include <unistd.h>
#include <time.h>
#include <string.h>

int main()
{
    char * code = "1234";
    char *user_input;
    size_t len = 16;

    while(getline(&user_input,&len, stdin))
    {
        char *p = user_input, *q = code;
        clock_t start = clock();

        while(*p == *q){p++, q++;};
        printf((*p == '\n' && q == code + strlen(code)) ? "ok\n" : "fail\n");
        clock_t end = clock();      
        printf("%d\nTry again!\n", (int)(end - start));
    }
    return 0;
}

这是原始解密器的工作方式吗?

0 个答案:

没有答案