2010-04-24 32 views
13

Tôi gặp vấn đề khá lạ. Đối với Bảng băm phân tán, tôi cần có khả năng thực hiện một số thao tác toán đơn giản trên băm MD5. Chúng bao gồm một tổng (tổng số đại diện bởi băm) và một hoạt động modulo. Bây giờ tôi tự hỏi cách tốt nhất để thực hiện các hoạt động này là gì. Tôi đang sử dụng hashlib để tính toán băm, nhưng kể từ khi băm tôi nhận được sau đó là chuỗi, làm thế nào để tôi tính toán với họ?Hoạt động trên băm Python

Trả lời

23

Bạn có thể sử dụng phương pháp hexdigest() để có được chữ số thập lục phân, và sau đó chuyển đổi chúng sang một số:

>>> h = hashlib.md5('data') 
>>> int(h.hexdigest(), 16) 
188041611063492600696317361555123480284L 

Nếu bạn đã có đầu ra của digest(), bạn có thể chuyển nó sang chữ số thập lục phân:

>>> hexDig = ''.join('%02x' % ord(x) for x in h.digest()) 
>>> int(hexDig, 16) 
188041611063492600696317361555123480284L 

Sửa:

Đối với trường hợp thứ hai, đó là thực tế ly dễ dàng chuyển đổi hơn bằng cách sử dụng .encode('hex') hoặc binascii.hexlify:

>>> int(h.digest().encode('hex'), 16) 
188041611063492600696317361555123480284L 
>>> int(binascii.hexlify(h.digest()), 16) 
188041611063492600696317361555123480284L 
Các vấn đề liên quan