![]() Here I used some string formatting to get the right format. With these small changes your code would become: def guess_password(real):Ĭhars = string.ascii_uppercase + string.digitsįor guess in itertools.product(chars, repeat=password_length): Just get it from the real password (or, in a more realistic cracker, pass the length as a parameter). You know the length of the password, so no need to hardcode it. You could have saved yourself the first str.join entirely by directly converting to list. You also str.join the guess, then convert it to a list, then replace the values and str.join it again. So don't go on generating all combinations of length 23, only to throw most of them away. Here you have a 20 character password separated into four blocks of five characters each, joined with a. So there is no need to explicitly do it yourself: range(random.You should exploit the structure of the password, if it has any. The builtin range() function will already start from zero if no other start value is specified. ![]() Instead, simply use the variable _ which conveys to the reader that your only using this loop for code repetition: for _ in range(0, random.randint(100000, 250000)): Inside of your first for-loop, you never use the variable letter. This makes much clearer where attempted_password is used. ![]() Instead of making attempted_password global, define it local to the solve_password() function. There is rarely ever a good reason to use them. '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'ĭon't use global variables. Instead of having the list_of_chars variable, make use of the string module which already defines all alphanumeric characters: > import string Is there any way to make my code more "Pythonic" (like a native Python coder)? and Is there anyway to improve performance, readability, etc. I've seen Python code which is written Java style, but is still easy to read because the author was consistent in their style. However, even if sometimes you choose not to comply with a certain coding standard, make sure you are consistent with your naming conventions. 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. Variables are lowercase with underscores as needed.Two newlines between function definitions.However, since your second and third questions are closely related, I'll give the same answers to both questions.įor the most part, your code complies with PEP8, ![]() I'll answer your first question separately. Is there any way to make my code more "Pythonic" (like a native Python coder)? Is there anyway to improve performance, readability, etc. ![]() Print "The function ".format(solve_password(password),Īn example output (without the password): The function solve_password took 3.540999889373779 seconds to finish.Īm I following coding standards for Python 2 (like PEP8) List_of_chars = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"įor letter in range(0, random.randint(100000, 250000)): I use a wrapper timeit function to time the function and the output is a basic print statement using. The password is randomly generated and will vary from 100,000 to 250,000 characters long. I created a fun password cracker using literal brute force, searching each character to see if it matches an ASCII character 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ. ![]()
0 Comments
Leave a Reply. |
AuthorWrite something about yourself. No need to be fancy, just an overview. ArchivesCategories |