为什么我每秒只能得到 800 个哈希值?
Why am I getting only 800 hashes per second?
我试图破解一个 6 个字符长的密码,但即使在 10 分钟后,也没有任何进展。所以,我决定找出我每秒找到多少哈希值。
以下代码需要破解密码,即'zzzz',h是crypt给出的hash,而s是使用的salt和hash算法
import crypt
#zzzz
h='$XR2ZpTWwyJL90BVD$HpFiwwuLyHOVbWnk/G/gUW.Hz0SutY4F9io4zjWkLL8bK6F3A4WCdSWQNgtq8fTx6PuzM1cdyQdlN2Qv/HlzH.'
s = '$XR2ZpTWwyJL90BVD$'
def brute(hash, salt, charSet="abcdefghijklmnopqrtuvxyz"):
# for pwd_len in range(7):
for guess in product(charSet,repeat= 4):
guess=''.join(guess)
if hash == crypt.crypt(guess,salt):
return guess
return -1
print(brute(h, s))
这是456,976个哈希值,但是破解密码的时间是9分20秒,非常慢。我知道单线程并不理想,但它不是仍然很低吗?
crypt()
函数故意放慢速度以防止此类暴力攻击,方法是使用“轮数”来计算哈希值。 SHA-512 方法默认使用 5000 轮,参见 the documentation of crypt(3) 此 python 模块基于:
Since glibc 2.7, the SHA-256 and SHA-512 implementations support a user-supplied number of hashing rounds, defaulting to 5000.
单个 运行 实际 SHA-512 哈希函数很快。
crypt
模块,就像作为它基础的 crypt()
系统调用一样,用于散列密码,好的密码散列算法是 设计的 放慢速度,恰恰是因为他们想让黑客难以完全按照您的要求进行操作。
在您的情况下,如果您使用 crypt.mksalt()
的默认参数生成盐,则每次调用 crypt.crypt()
都会运行 5000 次 SHA-512 迭代,因此您的程序实际上计算了 2284880000 个单独的 SHA-暴力破解此密码所需的十分钟内有 512 个哈希值。听起来应该更合理!
您可能想尝试更改传递给 mksalt()
的轮数,以了解它如何影响计算时间。
您可以使用 GPU 来破解 hashcat 的哈希值。对于你的情况,
hashcat -m 1800 -w 3 -O -a 3 '$XR2ZpTWwyJL90BVD$HpFiwwuLyHOVbWnk/G/gUW.Hz0SutY4F9io4zjWkLL8bK6F3A4WCdSWQNgtq8fTx6PuzM1cdyQdlN2Qv/HlzH.' ?l?l?l?l
我的 RTX 3080 花了 4 秒。破解 6 个小写字母大约需要 12 分钟。
我试图破解一个 6 个字符长的密码,但即使在 10 分钟后,也没有任何进展。所以,我决定找出我每秒找到多少哈希值。
以下代码需要破解密码,即'zzzz',h是crypt给出的hash,而s是使用的salt和hash算法
import crypt
#zzzz
h='$XR2ZpTWwyJL90BVD$HpFiwwuLyHOVbWnk/G/gUW.Hz0SutY4F9io4zjWkLL8bK6F3A4WCdSWQNgtq8fTx6PuzM1cdyQdlN2Qv/HlzH.'
s = '$XR2ZpTWwyJL90BVD$'
def brute(hash, salt, charSet="abcdefghijklmnopqrtuvxyz"):
# for pwd_len in range(7):
for guess in product(charSet,repeat= 4):
guess=''.join(guess)
if hash == crypt.crypt(guess,salt):
return guess
return -1
print(brute(h, s))
这是456,976个哈希值,但是破解密码的时间是9分20秒,非常慢。我知道单线程并不理想,但它不是仍然很低吗?
crypt()
函数故意放慢速度以防止此类暴力攻击,方法是使用“轮数”来计算哈希值。 SHA-512 方法默认使用 5000 轮,参见 the documentation of crypt(3) 此 python 模块基于:
Since glibc 2.7, the SHA-256 and SHA-512 implementations support a user-supplied number of hashing rounds, defaulting to 5000.
单个 运行 实际 SHA-512 哈希函数很快。
crypt
模块,就像作为它基础的 crypt()
系统调用一样,用于散列密码,好的密码散列算法是 设计的 放慢速度,恰恰是因为他们想让黑客难以完全按照您的要求进行操作。
在您的情况下,如果您使用 crypt.mksalt()
的默认参数生成盐,则每次调用 crypt.crypt()
都会运行 5000 次 SHA-512 迭代,因此您的程序实际上计算了 2284880000 个单独的 SHA-暴力破解此密码所需的十分钟内有 512 个哈希值。听起来应该更合理!
您可能想尝试更改传递给 mksalt()
的轮数,以了解它如何影响计算时间。
您可以使用 GPU 来破解 hashcat 的哈希值。对于你的情况,
hashcat -m 1800 -w 3 -O -a 3 '$XR2ZpTWwyJL90BVD$HpFiwwuLyHOVbWnk/G/gUW.Hz0SutY4F9io4zjWkLL8bK6F3A4WCdSWQNgtq8fTx6PuzM1cdyQdlN2Qv/HlzH.' ?l?l?l?l
我的 RTX 3080 花了 4 秒。破解 6 个小写字母大约需要 12 分钟。