测试所有可能的加密密钥需要多长时间?

时间:2017-03-07 01:49:16

标签: javascript encryption cryptography

我的任务是完成加密和解密文本的代码,并回答问题:

假设我们每秒可以测试10亿个加密密钥,那么测试所有可能的256位加密密钥需要多少年?

我不明白如何解决问题,因为我不明白你应该知道你正在测试多少加密密钥。您是否正在测试26个加密密钥,因为这是字母表中的字母数量?不会明显少于一秒 - 甚至不到一年?是" 256位"部分影响答案?

我不确定代码是否有助于回答这个问题,但如果是这样的话,就是它(如果输入的文本包含x,y或z,则此代码不起作用):

Looper.getMainLooper()

2 个答案:

答案 0 :(得分:2)

256位是指密钥的长度,即它具有256位信息。一位可以是0或1。

如果我们有两位,我们可以代表2 ^ 2个数字:

0 0 = 0
0 1 = 1
1 0 = 2
1 1 = 3

随着我们增加位数,我们可以表示的数字增加2的幂。对于 n 位,我们可以表示 2 ^ n 可能的数字。< / p>

因此,在您的情况下,256位密钥可以表示2^256个不同的值。

对于您的代码,凯撒密码是一种移位密码,可将值移动一定量。关键是字母表已被移动多少,因此有26个可能的键。很小。您需要做的就是测试每个可能的密钥,直到您获得相同的值。

答案 1 :(得分:1)

如果有256个不同的位,那么这意味着每个位有两种可能性。按照这个逻辑,我们可以清楚地看到计算机必须经历2 ^ 256种不同的可能性。使用每秒10亿个加密密钥的测量值,大约需要3 * 10 ^ 60年才能解码所有这些可能性,这超过了宇宙年龄的10 ^ 50倍。正因为如此,才能解密256位密钥。这也解释了为什么256位密钥比128位密钥更有效。 128位密钥具有2 ^ 128种可能性,而256位密钥具有2 ^ 256位密钥。

希望这有帮助!!!