2012-08-29 32 views
5

Tôi đang cố gắng để xây dựng một md5 cracker để thực hành. Trước khi tôi đi xa hơn nữa ở đây là mã của tôi:Làm thế nào tôi có thể làm một mã hóa nhị phân của một chuỗi trong python?

def offline_wordlist_attack(list_path): 
     with fileinput.input(files=(list_path)) as wordlist: 
      for word in wordlist: 
       md5_hash_object = hashlib.md5() # constructing an md5 hash object 
       md5_hash_object.update(binascii.a2b_uu(word)) 
       word_digest = md5_hash_object.digest() # performing the md5 digestion of the word 
       print(word_digest) # Debug 

Vấn đề của tôi là md5_hash_object.update(binascii.a2b_uu(word)). Tài liệu hashlib Python 3 cho biết rằng chuỗi được chuyển đến update() phải ở dạng biểu diễn nhị phân. Tài liệu sử dụng ví dụ m.update(b"Nobody inspects"). Trong mã của tôi, tôi không thể chỉ cần đính kèm b trước biến số word. Vì vậy, tôi đã cố gắng để sử dụng thư viện binascii, nhưng thư viện mà quá, có một lưu ý trong tài liệu nêu:

Note

Encoding và giải mã các chức năng không chấp nhận chuỗi Unicode. Chỉ đối tượng xác nhận và đối tượng có thể được xử lý.

Ai đó có thể giúp tôi với điều này? Đó là nhận được tốt hơn của tôi.

+0

lưu ý: 'fileinput.input()' có thể quá chậm trong trường hợp của bạn. Bạn có thể sử dụng 'md5 (word) .digest()' mà không có 'update()' rõ ràng. – jfs

Trả lời

8

Bạn cần chuyển một đối tượng bytes, thay vì str. Cách điển hình để đi từ str (chuỗi unicode trong Python 3) đến bytes là sử dụng phương thức .encode() trên chuỗi và chỉ định mã hóa bạn muốn sử dụng.

my_bytes = my_string.encode('utf-8') 
4

Chỉ cần gọi fileinput.input(...,mode='rb') để mở tệp ở chế độ nhị phân. Các tệp như vậy tạo ra các chuỗi nhị phân thay vì các chuỗi Unicode như các tệp được mở trong chế độ văn bản.

Nó cho phép bạn bỏ qua giải mã không cần thiết (ngầm) của byte đọc từ đĩa, sau đó mã hóa chúng trở lại byte bằng cách sử dụng .encode() trước khi chuyển chúng đến md5().

+0

Đây sẽ là một giải pháp khác. Tuy nhiên, trong trường hợp tổng quát hơn, nó có nhược điểm là không đảm bảo mã hóa bạn đang làm việc với (vì nó phụ thuộc vào việc mã hóa tệp đầu vào). – Amber

Các vấn đề liên quan