2011-07-12 37 views
6

Tôi đang tìm một phương pháp để tạo danh sách hoặc phát hiện bàn phím chạy trong mật khẩu.Tôi có thể tạo/phát hiện bàn phím bằng mật khẩu bằng cách nào?

Tôi có thể ràng buộc vấn đề của mình với các tiêu chí mật khẩu như độ dài và số lượng ký tự đặc biệt bắt buộc.

Ví dụ chạy khóa đơn giản có thể là "6yhn^YHN" hoặc "zse4ZSE $".

More phức tạp chạy then chốt có thể là trong hình dạng khác nhau, giống như một 'V' hoặc 'X' (ví dụ: "mko0mju7MKO) MJU &")

Ý tưởng ban đầu cho điều này là để làm nghiên cứu thống kê trên bãi mật khẩu lớn và thấy sự phổ biến của các mật khẩu chỉ chạy chính, nhưng tôi nghĩ rằng nó có thể có các ứng dụng tích cực trong các công cụ thực thi sức mạnh mật khẩu.

+0

Ngôn ngữ nào bạn đang cố thực hiện việc này? –

+0

@ citizen-conn Tôi là người bất khả tri về ngôn ngữ tại thời điểm này. Tôi sẵn sàng làm việc với bất cứ điều gì cung cấp cách tốt nhất để làm điều đó. – Evan

+0

Lưu ý rằng cách dễ nhất để thực thi mật khẩu mạnh là tạo ngẫu nhiên mật khẩu và không cung cấp cho người dùng bất kỳ tùy chọn nào để thay đổi chính nó. Nếu bạn hạn chế không gian theo các quy tắc, bạn thực sự làm cho mật khẩu yếu hơn. – Joey

Trả lời

3

Tôi không thấy làm thế nào điều này có liên quan đến regex - bạn có nghĩ rằng bạn có thể làm điều này với các biểu thức chính quy? Tôi không thể thấy như thế nào.

Tôi nghĩ đó là vấn đề về đồ họa, phải không? Xây dựng một biểu đồ với tất cả các cạnh giữa các phím và các hàng xóm của chúng, sau đó duyệt qua đầu vào và xem nó có biểu diễn một đường truyền hợp lệ của biểu đồ hay không. "Các thao tác phức tạp hơn" của bạn về cơ bản chỉ ngược lại - nếu khóa tiếp theo trong đầu vào không phải là cạnh trong biểu đồ của bạn, hãy quay lại phần đầu (hoặc có thể quay lại từng cái một, nếu bạn muốn bao gồm "T" hoặc các biến thể khác ?) và xem bạn có thể tiếp tục vượt qua ...

Đó là một câu trả lời khá mơ hồ cho một câu hỏi khá mơ hồ, bạn sẽ không nói?

+0

Cảm ơn, tôi nghĩ rằng điều này đặt tôi đi đúng hướng. Tôi không chắc mình đang nghĩ gì với regex, tôi đã thay đổi các thẻ để phản ánh điều đó. – Evan

4

Bạn sẽ không thực hiện việc này với regex. Bạn cần tạo cấu trúc dữ liệu biểu đồ mô hình hóa bàn phím, với mỗi phím là một nút và các cạnh được gán một hướng (vì vậy nút G sẽ có cạnh có hướng Phải và điểm đến H). Bạn cũng có thể có một cạnh đi từ một chìa khóa để nó chuyển phiên bản (hoặc từ chuyển sang unshifted). Sau đó, bạn có thể thử nghiệm để chạy một mật khẩu bằng cách kiểm tra xem nó có tuân theo biểu đồ theo hướng nhất quán cho N ký tự hay không.

Có một số lượng rất lớn của chạy tốt trên một bàn phím, vì vậy tôi không chắc chắn rằng mật khẩu được bao gồm chạy là kém an toàn hơn so với mật khẩu có thể khác ...

+0

heh, câu trả lời tốt :) upvoted –

+0

Có rất ít nút n-path trong biểu đồ bàn phím hơn là có n-kết hợp của các nút, mặc dù. –

+0

Cảm ơn bạn đã phản hồi. Tôi sẽ đi với điều này. Có vẻ như đồ thị Python có ở trên và vượt ra ngoài chức năng tôi cần để nhanh chóng thực hiện việc này. Tôi đã gửi e.dan dấu kiểm kể từ khi anh ấy đứng ngay trước bạn. – Evan

0

Điều này thực sự có lẽ sẽ không thật khó. Lưu trữ một bộ sưu tập của các đối tượng đại diện cho các nhân vật, với những đặc tính trên chúng như TL, BR, T, BL (Top Left, Bottom Right, Top, Bottom Left) để ví dụ:

a = RunKey.get("A"); 



public class RunKey{ 

    public static Key get(Character char){ 
     switch(char){ 
      case A,a: return new A(); 
      break; 
      // one for every letter 
     } 
    } 
} 

private class A extends RunKey implements IRunKey{ 

    public IRunKey BR(){ 
     return new Z(); 
    } 

    public IRunKey TR(){ 
     return new W(); 
    } 

    public IRunKey T(){ 
     return new Q(); 
    } 

    public Direction getDirection(Character char){ 
     tempRunKey = Runkey.get(char); 
     if (tempRunKey.T.toString == "char"){ 
      return T; 
     } 
    } 
} 

tôi bắt đầu nhận được điên tạo Giao diện "Hướng" để nó phức tạp hơn một chút so với lúc đầu nhưng bạn chỉ có quá nhiều biến chứng và các đối tượng tương đối đơn giản, vì vậy nếu bạn giữ nó sáng thì có lẽ nó sẽ vẫn khá nhanh.

Tôi cảm thấy như một ngôn ngữ năng động có thể là tốt nhất cho một cái gì đó như thế này ...

Và vâng, như câu trả lời khác lưu ý, regex sẽ không hoạt động.

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