因此,这是一个分为两个部分的问题,但是基于同一项目。我正在尝试编写一个小程序,以说明计算机如何使用蛮力攻击快速破解密码。它只有三个输入:一个用于表示是否应使用整数的复选框,一个用于表示是否应使用字母的复选框,以及一个用于输入要破解的密码的文本框。然后输出组合数。这是我的代码:
dim a,b,c,d,P as double
'Using the following formula:
'P(n,r) = n!/(r!(n-r)!)
'Let's assume we are just using numbers, so n = 10
'r = the count of characters in the textbox.
a = factorial(n)
b = factorial(r)
c = (n - r)
d = factorial(c)
P = a / (b * d)
Output = "With a password of " & r & " characters and " & n & " possible values, the number of combinations are " & P
Me.RichTextBox1.Text = Output & vbCrLf
Function factorial(ByVal n As Integer) As Integer
If n <= 1 Then
Return 1
Else
Return factorial(n - 1) * n
End If
End Function
所以,假设我只看0-9个字符,密码中包含以下字符数,我得到:
P(10,1) = 10!/(1! * (10-1)!) = 10
P(10,2) = 10!/(2! * (10-2)!) = 45
P(10,3) = 10!/(3! * (10-3)!) = 120
P(10,4) = 10!/(4! * (10-4)!) = 210
P(10,5) = 10!/(5! * (10-5)!) = 252
P(10,6) = 10!/(6! * (10-6)!) = 210
P(10,7) = 10!/(6! * (10-7)!) = 120
一旦超过5,您会看到组合数量下降了。我认为这是正确的,但是想在介绍之前进行检查。这是因为样本总数增加时池中的总数保持不变吗?
我的第二个问题是关于如何考虑破解重复数字的密码。再次,让我们假设我们只是从数字0-9拉出。如果样本大小为两个(假设为15),那么有45种可能的组合,对吗?但是,如果他们输入55,该怎么办?还有45种组合吗?我想计算机仍然需要遍历每种可能的组合,因此仍然会考虑45种可能性吗?