2010-04-28 54 views
6

Tôi không hiểu đầy đủ thuật toán băm. Mọi người đều quan tâm giải thích cho tôi theo một cách rất dễ hiểu.Hashing Thuật toán, sử dụng của nó?

Cảm ơn

EDIT: Sử dụng nó với Tên người dùng từ tệp văn bản.

+2

Bạn vô tình giải thuật băm – mquander

+0

Có nhiều "thuật toán băm" và nhiều ứng dụng cho băm. Có lẽ bạn có thể cụ thể hơn trong câu hỏi của bạn? – Amber

+0

Bạn đã quên –

Trả lời

10

Có rất nhiều hashing algorithms, nhưng ý tưởng cơ bản là nhanh chóng và (gần) duy nhất tìm ra số nhận dạng cho một đoạn dữ liệu. Điều này sau đó có thể được sử dụng như một chỉ mục vào một bảng để dữ liệu có thể được nhanh chóng tìm kiếm. Hầu hết các thuật toán băm có xung đột, trong đó hai phần dữ liệu sẽ băm với cùng một giá trị, nhưng điều này cực kỳ hiếm hoi đối với các thuật toán tốt nhất.

Ví dụ về lý do tại sao điều này có thể hữu ích, giả sử tôi đã băm toàn bộ danh bạ điện thoại cho thành phố của tôi. Bây giờ thay vì thực hiện tìm kiếm nhị phân khi tôi muốn tìm kiếm số của ai đó, tất cả những gì tôi phải làm là chạy tên của họ thông qua thuật toán băm sau đó truy cập trực tiếp vào chỉ mục đó trong bảng của tôi.

+0

Cảm ơn, điều này đã giúp. – ritch

+0

ngay cả khi tìm kiếm tên đó chúng ta cần phải sử dụng nhị phân hoặc tuyến tính phải không? Vì vậy, những gì các điểm trong chuyển đổi nó để băm –

+0

@ bharathmuppa Không, đó là không đúng. Bạn băm tên thành số nguyên và chuyển trực tiếp đến chỉ mục đó. –

2

Giả sử bạn đang yêu cầu ai đó về cơ bản giải thích cách sử dụng để băm suy nghĩ về một mảng. Bây giờ hãy tưởng tượng một mảng lớn nơi bạn muốn tìm một đoạn dữ liệu cụ thể chỉ nằm trong một khe mảng. Thay vì lặp qua mảng, bạn có thể lấy dữ liệu đầu vào và sử dụng dữ liệu đó để tính chỉ mục. Sử dụng cùng một công thức mà bạn đã sử dụng để lưu trữ dữ liệu trong mảng, bạn chỉ có thể chuyển đến vị trí của dữ liệu bạn muốn thay vì lặp.

+0

Cảm ơn, điều này đã giúp. – ritch

2

Thuật toán băm cố gắng so sánh dữ liệu lớn dễ dàng hơn. Thay vì so sánh dữ liệu với bình đẳng, nó đủ để so sánh các giá trị băm.

Có rất nhiều thuật toán băm khác nhau, một số thuật toán băm mật mã như MD5, SHA1, SHA256 vv. Bạn có hai giá trị băm bằng nhau, bạn có thể chắc chắn rằng dữ liệu cũng giống nhau.

+0

Cảm ơn, điều này cũng đã giúp. – ritch

2

Hàm băm nghĩa là mối quan hệ 1-1 giữa dữ liệu. Đây là một kiểu dữ liệu phổ biến trong các ngôn ngữ, mặc dù đôi khi nó được gọi là một từ điển. Thuật toán băm là một cách để lấy đầu vào và luôn có cùng đầu ra, được gọi là khôn ngoan khác như hàm 1 đến 1. Một hàm băm lý tưởng là khi cùng một quá trình này luôn luôn mang lại một đầu ra duy nhất. Vì vậy, bạn có thể nói với ai đó, đây là một tập tin, và đây là băm md5 của nó. Nếu tệp đã bị hỏng trong khi băm md5 sẽ là một giá trị khác.

Trong thực tế, hàm băm sẽ luôn tạo ra giá trị có cùng kích thước, ví dụ md5() sẽ luôn trả về 128 bit bất kể kích thước của đầu vào. Điều này làm cho một mối quan hệ 1-1 không thể. A cryptographic hash function có biện pháp phòng ngừa bổ sung trong việc làm cho nó khó khăn để sản xuất 2 đầu vào khác nhau với cùng một đầu ra, điều này được gọi là va chạm. Nó cũng làm cho nó khó khăn để đảo ngược chức năng. Hàm băm được sử dụng để lưu trữ mật khẩu bởi vì nếu một kẻ tấn công lấy mã băm của mật khẩu thì nó sẽ buộc kẻ tấn công phá vỡ băm trước khi anh ta có thể sử dụng nó để đăng nhập. Để phá vỡ các cuộc tấn công băm sẽ lấy một danh sách từ hoặc một từ điển tiếng Anh và tìm tất cả các giá trị băm tương ứng và sau đó lặp lại mặc dù danh sách cho mỗi mật khẩu tìm kiếm một kết quả phù hợp.

md5(), sha0 và sha1() đều dễ bị tấn công va chạm băm và không bao giờ được sử dụng cho bất kỳ vấn đề bảo mật nào liên quan. Thay vào đó bất kỳ thành viên nào của họ sha-2, chẳng hạn như sha-256 nên được sử dụng.

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