Tạo một số mã PIN an toàn


17

Lấy cảm hứng từ bài đăng di cư xấu này .

Người đứng đầu an ninh tại công ty của bạn quan tâm đến hệ thống tạo mã PIN của bạn sau khi nó cung cấp cho anh ta 12345. Anh ấy cũng không thực sự đánh giá cao trò đùa Spaceballs mà bạn đã trả bằng chi phí của anh ấy, vì vậy bạn đã được ủy quyền để viết lại trình tạo mã PIN. Vì nó phải phù hợp với một số phần cứng đặc biệt, bạn phải làm cho nó nhỏ nhất có thể.

Nhiệm vụ của bạn

  • Bạn lấy hai đầu vào - # mã PIN và kích thước mã PIN bằng chữ số.
  • Tạo ngẫu nhiên số lượng mã PIN có kích thước được chỉ định và in ra.
  • Tất cả các mã PIN hợp lệ có kích thước phải có thể được in ra, ngay cả khi chúng không có khả năng thống nhất.
  • Tuy nhiên, có một số hạn chế đối với mã PIN - đây là những hạn chế không hợp lệ:

    1. Nếu tất cả các cặp có cùng một chữ số: 114422(Lưu ý: điều này rõ ràng sẽ bao gồm tất cả các mã PIN cùng một chữ số).
    2. Mã PIN ngày càng tăng (mod 10) : 246802.
    3. Tất cả các nhóm 3 là dòng vật lý trên bàn phím của 1 2 3;4 5 6;7 8 9;bksp 0 enter;: 147369.
    4. Mã PIN hoàn toàn có thể được chia thành các nhóm từ quy tắc 1 và quy tắc 3.


  • Đây là , vì vậy mã ngắn nhất tính bằng byte sẽ thắng!

Liệu quy tắc một cũng bao gồm một cặp đôi duy nhất (như 55123)?
mınxomaτ

@minxomat điểm tốt, củng cố các quy tắc để bao gồm cả hai nhóm. Điều đó sẽ kể từ nửa sau 123, nhưng 55432sẽ ổn thôi.
Maltysen

Có quy tắc 3 bao gồm các đường chéo?
Martin Ender

6
Điều trớ trêu là định nghĩa về cái gọi là pin "an toàn" này chỉ làm giảm số lượng kẻ tấn công có thể phải dùng vũ lực!
DankMeme

1
Độ dài ngắn nhất cho quy tắc 2 là gì?
Dennis

Câu trả lời:


1

Bình thường, 120 byte

Arz7VGJ1WJK%"%0*d",HO-^TH1=J|q1l{m%-F_vMcd1T.:K2u|GHmu|GHm?qlk2:k"(.)\\1"0?qlk3}k+++=bcS"123456789"3_Mb.Tb_M.TbZdZ./K0)K

Hình tôi nên thêm một thực hiện thực sự sau đó. Tạo số ngẫu nhiên cho đến khi tìm thấy một số đáp ứng tất cả các yêu cầu. Có lẽ có thể được cải thiện rất nhiều!

Phiên bản trực tuyến


1
Tôi đã thay đổi các quy tắc để bao gồm yêu cầu mã PIN phải ngẫu nhiên và tất cả mã PIN phải có thể.
Maltysen

Tôi nghĩ bạn có thể :)

0

Perl 5, 244

Bắt đầu với việc tạo số ngẫu nhiên cho kích thước đã cho.
Và chỉ in những thứ không đáp ứng các hạn chế.

Tìm một giải pháp cho các dòng bàn phím (không có kết hợp mã hóa cứng) thật thú vị.

($k,$l)=@ARGV;$m=10**$l-1;while($n<$k){$_=sprintf("%0".$l."d",int(rand($m)));@N=split//,$_;pop@N;$i=$d=0;while(++$i<@N&&$d<1){$d=$N[$i-1]<=>$N[$i]}$b=$_;$b=~s|\d|@A=split//,$';2*$A[0]-$&-$A[1]==0|eg;if((!m/(\d)\1/)&$b>0&$d>=0){$n++;print$_.$/}}

Kiểm tra

$ perl gen_pins.pl 10 5
98121
15931
69042
93730
83458
25312
24601
49468
49490
67012
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.