Generieren Sie einige sichere PINs


17

Inspiriert von dieser schlecht erhaltenen migrierten Post .

Der Sicherheitschef Ihres Unternehmens ist besorgt über Ihr PIN-Generierungssystem, nachdem es ihm gegeben hat 12345. Er hat den Spaceballs-Witz, den Sie auf seine Kosten gemacht haben, auch nicht wirklich geschätzt. Sie wurden also beauftragt, den PIN-Generator neu zu schreiben. Da es auf spezielle Hardware passen muss, muss es so klein wie möglich sein.

Deine Aufgabe

  • Sie nehmen zwei Eingaben vor - Anzahl der PINs und PIN-Größe in Ziffern.
  • Generieren Sie die angegebene Anzahl von PINs der angegebenen Größe nach dem Zufallsprinzip und drucken Sie sie aus.
  • Alle gültigen PINs der Größe müssen ausgedruckt werden können, auch wenn sie nicht einheitlich wahrscheinlich sind.
  • Es gibt jedoch einige Einschränkungen für die PINs - hier sind die ungültigen:

    1. Wenn alle Paare die gleiche Ziffer haben: 114422(Hinweis: Dies beinhaltet natürlich alle PINs mit der gleichen Ziffer).
    2. Zunehmend linear PINs (mod 10): 246802.
    3. Alle Gruppen von 3 sind physische Linien auf der Tastatur 1 2 3;4 5 6;7 8 9;bksp 0 enter;: 147369.
    4. Die PIN kann vollständig in Gruppen von Regel 1 und Regel 3 aufgeteilt werden.


  • Das ist , also gewinnt der kürzeste Code in Bytes !

Enthält Regel 1 auch ein einfaches Doppelpaar (wie 55123)?
Mittwoch,

@minxomat guter Punkt, Änderung der Regeln, um beide Gruppen einzuschließen. Das wird man seit der zweiten Halbzeit tun 123, 55432wäre aber in Ordnung.
Maltysen

Enthält Regel 3 Diagonalen?
Martin Ender

6
Die Ironie ist, dass diese Definition eines sogenannten "sicheren" Pins nur die Anzahl der Pins reduziert, die Angreifer möglicherweise brachial zwingen müssen!
DankMemes

1
Was ist die kürzeste Länge für Regel 2?
Dennis

Antworten:


1

Pyth, 120 Bytes

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

Dachte mir, ich sollte dann eine echte Implementierung hinzufügen. Erzeugt Zufallszahlen, bis eine gefunden wird, die alle Anforderungen erfüllt. Kann wohl noch viel verbessert werden!

Online Version


1
Ich habe die Regeln dahingehend geändert, dass PINs zufällig sein müssen und alle PINs möglich sein müssen.
Maltysen

Ich dachte, Sie könnten :)

0

Perl 5, 244

Beginnt mit der Erzeugung von Zufallszahlen für die angegebene Größe.
Und druckt nur diejenigen, die die Einschränkungen nicht erfüllen.

Es hat Spaß gemacht, eine Lösung für die Tastaturleitungen zu finden (ohne Hardcoding-Kombinationen).

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

Prüfung

$ perl gen_pins.pl 10 5
98121
15931
69042
93730
83458
25312
24601
49468
49490
67012
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.