1
我只是有一个快速的问题来验证我的编程和数学是否正确。对不起,如果这是脱离主题,我没有其他地方要求获得高质量的答案;)我怎么能再检查答案是正确的?由于使用模幂运算的C编程
这是我的问题:
如果密码有2^48个可能的密钥,你有1000台计算机,每一个每秒可测试50万个的加密密钥,你会是多少天能在最坏的情况下恢复正确的密钥,假设进行了强力搜索,并且在尝试使用解密时可以立即识别出正确的密钥? (回想一下,有86,400秒的日子。)
这里是我的程序输出来解决这个问题:
我的代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int max_power(int base,int exp,int mod);
int main(void)
{
int num_computers=1000;
int keys_per_second= 500000;
int seconds_in_day=86400;
printf("Number of keys: 2^48\n");
printf("Number of computers: %d\n",num_computers);
printf("Number of keys/persecond: %d\n",keys_per_second);
printf("Number of days: %d\n",max_power(2,48,seconds_in_day)*num_computers*keys_per_second);
return 0;
}
int max_power(int base,int exp,int mod)
{
if (exp == 0)
return 1;
else if (exp%2 == 0) {
int mysqrt = max_power(base, exp/2, mod);
return (mysqrt*mysqrt)%mod;
}
else
return (base*max_power(base, exp-1, mod))%mod;
}
最终代码(仍不完全满意,但我会问我的教授,如果这是可以接受的测试):
int main(void)
{
double num_computers=1000;
double keys_per_second= 500000;
double seconds_in_day=86400;
long double keys=pow(2.0,48);
printf("Number of keys: %.0lf\n",keys);
printf("Number of computers: %.0f\n",num_computers);
printf("Number of keys/persecond: %.0f\n",keys_per_second);
printf("============================================\n");
printf("Time to decrypt all keys: %.2f days\n",keys/(num_computers*keys_per_second*seconds_in_day));
return 0;
}
我没有看过你的代码在做什么,但是,wolfram alpha呢? [(2^48)/(500000 * 1000 * 86400)= 6.5156 ...天](http://www.wolframalpha.com/input/?i=%282%5E48%29%2F%28500000*1000* 86400%29)。希望我明白你的问题是什么。 – Macattack
如果你使用64位整数,这会得到一个更简单的顺便说一句。 – WhozCraig
你介意解释你在那里做了什么,以及它不怎么样(2^48)/(500000 * 1000 * 86400)〜6.5156?或者1000倍,如果你解释为“更糟糕的情况”,因为所有的计算机都在同一个订单上测试完全相同的密钥,直到所有人都能同时得到答案? – brunocodutra