안전한 PIN 생성


17

이 잘못 접수이 게시물에서 영감을 받았습니다 .

회사의 보안 책임자는 PIN 생성 시스템이 제공된 후 PIN 생성 시스템에 대해 우려하고 있습니다 12345. 그는 또한 당신이 그의 비용으로 행한 Spaceballs 농담을 정말로 좋아하지 않았으므로 PIN 생성기를 다시 쓰도록 위임되었습니다. 특정 하드웨어에 맞아야하므로 가능한 작게 만들어야합니다.

당신의 작업

  • PIN 수와 PIN 크기 (숫자)의 두 가지 입력을받습니다.
  • 지정된 크기의 지정된 PIN 수를 임의로 생성하여 인쇄하십시오.
  • 크기가 일정하지 않은 경우에도 유효한 모든 크기의 PIN을 인쇄 할 수 있어야합니다.
  • 그러나 PIN에는 몇 가지 제한이 있습니다. 잘못된 PIN은 다음과 같습니다.

    1. 모든 쌍이 동일한 숫자 인 경우 : 114422(참고 : 분명히 모든 동일한 숫자 PIN이 포함됩니다).
    2. 점점 선형적인 PIN (mod 10) : 246802.
    3. 3 모든 그룹의 키패드에 물리적 라인이다 1 2 3;4 5 6;7 8 9;bksp 0 enter;: 147369.
    4. PIN은 규칙 1과 규칙 3의 그룹으로 완전히 나눌 수 있습니다.


  • 이것은 이므로 바이트 단위의 가장 짧은 코드가 이깁니다!

규칙 1에도 단일 이중 쌍 (예 :)이 포함되어 55123있습니까?
mınxomaτ

@minxomat 좋은 점, 두 그룹을 모두 포함하는 규칙을 개정. 하반기부터는 하나 123이지만 55432괜찮을 것입니다.
Maltysen

규칙 3에 대각선이 포함됩니까?
Martin Ender

6
아이러니 한 점은 소위 "보안"핀에 대한 이러한 정의는 공격자가 강제로 무력화해야하는 핀의 수만 줄인다는 것입니다!
DankMemes

1
규칙 2의 최단 길이는 얼마입니까?
Dennis

답변:


1

Pyth, 120 바이트

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

그때 실제 구현을 추가해야한다고 생각했습니다. 모든 요구 사항을 충족하는 숫자가 발견 될 때까지 난수를 생성합니다. 아마 많이 향상 될 수 있습니다!

온라인 버전


1
PIN이 임의적이어야하고 모든 PIN이 가능해야한다는 요구 사항을 포함하도록 규칙을 변경했습니다.
Maltysen

나는 당신이 생각할 것이다 :)

0

펄 5, 244

주어진 크기에 대해 난수를 생성하는 것으로 시작합니다.
제한을 충족하지 않는 인쇄 만합니다.

(하드 코딩 조합없이) 키패드 라인에 대한 솔루션을 찾는 것은 다소 재미있었습니다.

($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$_.$/}}

테스트

$ perl gen_pins.pl 10 5
98121
15931
69042
93730
83458
25312
24601
49468
49490
67012
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.