The top ten password-cracking techniques used by hackers. A table becomes useless if the hash it's trying to find has been 'salted' by the addition of random characters to its password ahead. Password Cracking Passwords are typically cracked using one or more of the following methods: Guessing: Even with all of the advanced programs, algorithms, and techniques computer scientists have come up with, sometimes the most effective way of cracking a user password is by using logic and/or trying commonly used passwords.
- Brute Forcing Passwords Algorithm
- Password Cracking Software
- Password Cracking Algorithm Python
- Password Attack Methods
I created a fun password cracker using literal brute force, searching each character to see if it matches an ASCII character 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
. The password is randomly generated and will vary from 100,000 to 250,000 characters long. I use a wrapper timeit
function to time the function and the output is a basic print
statement using .format()
:
An example output (without the password):
So my questions are:
Am I following coding standards for Python 2 (like PEP8)
Is there anyway to improve performance, readability, etc.
Is there any way to make my code more 'Pythonic' (like a native Python coder)?
Brute Forcing Passwords Algorithm
2 Answers
$begingroup$I'll answer your first question separately. However, since your second and third questions are closely related, I'll give the same answers to both questions.
Am I following coding standards for Python 2 (like PEP8)
For the most part, your code complies with PEP8,
- Spaces between operators
- Two newlines between function definitions
- Variables are lowercase with underscores as needed
- etc...
The only thing I'd suggest is to break some of your longer statements up - such as your print
statement at the end of your script - onto separate lines, with each separate line being indented.
However, even if sometimes you choose not to comply with a certain coding standard, make sure you are consistent with your naming conventions. I've seen Python code which is written Java style, but is still easy to read because the author was consistent in their style.
Is there any way to make my code more 'Pythonic' (like a native Python coder)? and Is there anyway to improve performance, readability, etc.
Instead of having the
list_of_chars
variable, make use of thestring
module which already defines all alphanumeric characters:Don't use global variables. There is rarely ever a good reason to use them. Instead of making
attempted_password
global, define it local to thesolve_password()
function. This makes much clearer whereattempted_password
is used.Inside of your first
for
-loop, you never use the variableletter
. Instead, simply use the variable_
which conveys to the reader that your only using this loop for code repetition:The builtin
range()
function will already start from zero if no other start value is specified. So there is no need to explicitly do it yourself:
Whenever you are doing string addition in Python, you are probably doing it wrong. It is very slow, due to strings being immutable. Because of this Python will have to create a new string everytime you do string addition and copy over the content of the two strings you are adding.
Password Cracking Software
As a fix, just use list
and str.join
. Also, creating a password from a possible list of characters is something you might want to do again, so I would put it into a function.
This can be even further simplified using random.sample
: