I. Hiểu nguồn gốc và tác động của dữ liệu trùng lặp
Trước tiên, chúng ta cần hiểu tại sao lại có nhiều dữ liệu trùng lặp như vậy. Trong quá trình xây dựng từ điển, dữ liệu có thể được thu thập từ nhiều nguồn khác nhau, vốn có sự chồng lấn một phần. Ví dụ, khi thu thập dữ liệu từ các bảng từ vựng khác nhau, tập hợp mật khẩu phổ biến, danh sách các kết hợp ký tự khác nhau, v.v., một số từ cơ bản hoặc kết hợp mật khẩu đơn giản có thể xuất hiện trong nhiều nguồn.
Những dữ liệu trùng lặp này mang lại nhiều tác động tiêu cực. Từ quan điểm lưu trữ, không gian 2TB đã rất lớn, và nếu có nhiều nội dung trùng lặp, nó sẽ tương đương với việc lãng phí không gian lưu trữ quý giá. Trong quá trình sử dụng từ điển này để phá mật khẩu hoặc các hoạt động khác, những nội dung trùng lặp sẽ dẫn đến các hoạt động tìm kiếm và so sánh không cần thiết. Ví dụ, trong quá trình phá mật khẩu, thuật toán cần so sánh từng dòng trong từ điển với mật khẩu mục tiêu, và những nội dung trùng lặp sẽ tăng số lượng so sánh, dẫn đến tốc độ phá mật khẩu chậm hơn.
II. Phương pháp lọc bằng các công cụ xử lý văn bản
Sử dụng các công cụ trong hệ điều hành Windows
- Sử dụng PowerShell
- Trong hệ điều hành Windows, PowerShell cung cấp nhiều tính năng xử lý văn bản. Chúng ta có thể sử dụng các script PowerShell sau đây để loại bỏ những dòng trùng lặp:
```powershell
}
I. Hiểu nguồn gốc và tác động của dữ liệu trùng lặp
Trước tiên, chúng ta cần hiểu tại sao lại có nhiều dữ liệu trùng lặp như vậy. Trong quá trình xây dựng từ điển, dữ liệu có thể được thu thập từ nhiều nguồn khác nhau, vốn có sự chồng lấn một phần. Ví dụ, khi thu thập dữ liệu từ các bảng từ vựng khác nhau, tập hợp mật khẩu phổ biến, danh sách các kết hợp ký tự khác nhau, v.v., một số từ cơ bản hoặc kết hợp mật khẩu đơn giản có thể xuất hiện trong nhiều nguồn.
Những dữ liệu trùng lặp này mang lại nhiều tác động tiêu cực. Từ quan điểm lưu trữ, không gian 2TB đã rất lớn, và nếu có nhiều nội dung tr
}
$uniqueLines | Set - Content "unique_dictionary.txt"
```
Skript này trước tiên đọc tất cả các dòng trong "dictionary.txt" vào một mảng "$lines". Sau đó, nó duyệt qua từng dòng bằng một vòng lặp và nếu một dòng không có trong mảng mới "$uniqueLines", nó sẽ thêm dòng đó vào mảng này. Cuối cùng, nó lưu nội dung của mảng mới vào "unique_dictionary.txt".
Thuật toán chia đôi
- Vì tệp từ điển của chúng ta rất lớn (2T), việc xử lý trực tiếp có thể gặp các vấn đề như thiếu bộ nhớ. Thuật toán chia đôi có thể giải quyết tốt vấn đề này. Chúng ta có thể chia tệp lớn này thành nhiều tệp nhỏ hơn. Ví dụ, chúng ta có thể chia nó theo số dòng hoặc kích thước tệp nhất định.
- Sau đó, chúng ta lọc trùng lặp cho từng tệp con. Sau đó, chúng ta hợp nhất lại các tệp con thành một tệp. Trong quá trình hợp nhất, chúng ta cũng cần kiểm tra xem có trùng lặp nào không vì các tệp con khác nhau có thể chứa những nội dung giống nhau.
IV. Xác nhận kết quả lọc
Sau khi lọc trùng lặp, chúng ta cần xác nhận kết quả có chính xác không. Chúng ta có thể sử dụng một số phương pháp đơn giản, chẳng hạn như chọn ngẫu nhiên một số dòng và kiểm tra số lần xuất hiện của chúng trong tệp gốc và tệp đã lọc. Nếu chúng xuất hiện nhiều lần trong tệp gốc nhưng chỉ một lần trong tệp đã lọc, thì có nghĩa là việc lọc là hiệu quả.
Ngoài ra, chúng ta cũng có thể so sánh kích thước của tệp gốc và tệp đã lọc. Nếu kích thước của tệp đã lọc nhỏ hơn đáng kể so với tệp gốc và hoạt động bình thường trong các bài kiểm tra tiếp theo (chẳng hạn như sử dụng tệp từ điển này để thực hiện một kiểm tra đơn giản về mật khẩu, xem liệu nó có hoạt động tốt và không bỏ lỡ mật khẩu nào cần có), thì chúng ta cũng có thể kết luận rằng việc lọc trùng lặp đã đạt được kết quả tốt.
Lọc nội dung trùng lặp trong một tệp từ điển văn bản lớn như 2T là một công việc thử thách nhưng rất cần thiết. Bằng cách lựa chọn công cụ và thuật toán hợp lý, chúng ta có thể loại bỏ hiệu quả những nội dung trùng lặp, nâng cao chất lượng tệp từ điển và hiệu quả sử dụng, dù trong trường hợp phá mật khẩu hay các ứng dụng khác sử dụng tệp từ điển này.