कुछ सुरक्षित पिन जनरेट करें


17

इससे बुरी तरह से प्रेरित माइग्रेटेड पोस्ट से प्रेरणा मिली

आपकी कंपनी के सुरक्षा प्रमुख आपके पिन जेनरेट करने की प्रणाली के बारे में चिंतित हैं, क्योंकि उसने उसे दिया था 12345। उन्होंने वास्तव में अपने खर्च पर आपके द्वारा किए गए स्पेसबॉल मजाक की भी सराहना नहीं की, इसलिए आपको पिन जनरेटर को फिर से लिखने के लिए सौंप दिया गया है। चूंकि इसे कुछ विशेष हार्डवेयर पर फिट करना है, इसलिए आपको इसे जितना संभव हो उतना छोटा बनाना होगा।

आपका कार्य

  • आप दो इनपुट लेते हैं - # पिन का, और अंकों में पिन का आकार।
  • निर्दिष्ट आकार के पिन की संख्या को अनियमित रूप से उत्पन्न करें और इसे प्रिंट करें।
  • आकार के सभी मान्य पिन का प्रिंट आउट होना संभव है, भले ही वे समान रूप से संभावित न हों।
  • हालांकि, पिन पर कुछ प्रतिबंध हैं - यहां अमान्य हैं:

    1. यदि सभी जोड़े समान अंक हैं: 114422(नोट: इसमें स्पष्ट रूप से सभी समान अंक शामिल होंगे)।
    2. तेजी से रैखिक पिन (10 मोड) 246802:।
    3. 3 के सभी समूहों के कीपैड पर शारीरिक लाइनें हैं 1 2 3;4 5 6;7 8 9;bksp 0 enter;: 147369
    4. पिन को पूरी तरह से नियम 1 और नियम 3 से समूहों में विभाजित किया जा सकता है।



क्या नियम एक में एकल जोड़ी (जैसे 55123) भी शामिल है ?
mınxomaτ

@minxomat अच्छा बिंदु, दोनों समूहों को शामिल करने के लिए नियमों में संशोधन। कि एक के बाद दूसरी छमाही है 123, लेकिन 55432ठीक हो जाएगा।
माल्टीसेन

क्या नियम 3 में विकर्ण शामिल हैं?
मार्टिन एंडर

6
विडंबना यह है कि तथाकथित "सुरक्षित" पिन की यह परिभाषा केवल पिंस हमलावरों की संख्या को कम करती है, बल को भंग करना पड़ सकता है!
DankMemes

1
नियम 2 की सबसे छोटी लंबाई क्या है?
डेनिस

जवाबों:


1

पायथ, 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
मैंने उन नियमों को शामिल करने के लिए नियम बदल दिए हैं जो पिन यादृच्छिक होने चाहिए, और सभी पिन संभव होने चाहिए।
माल्टीसेन

मुझे लगा कि आप शायद :)

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
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.