यादृच्छिक स्ट्रिंग कैसे उत्पन्न करें?


209

मैं एक यादृच्छिक स्ट्रिंग (जैसे पासवर्ड, उपयोगकर्ता नाम, आदि) उत्पन्न करना चाहूंगा। आवश्यक लंबाई (जैसे 13 वर्ण) निर्दिष्ट करना संभव होना चाहिए।

मैं किन उपकरणों का उपयोग कर सकता हूं?

(सुरक्षा और गोपनीयता कारणों से, यह बेहतर है कि तार ऑफ लाइन उत्पन्न होते हैं, जैसा कि एक वेबसाइट पर ऑनलाइन विरोध किया गया है)।


1
AskUbuntu में पहले से ही अच्छे जवाब हैं । (मैं apgव्यक्तिगत रूप से उपयोग करता हूं ।)
स्पार्कहॉक

1
@Sparhawk AskUbuntu सवाल / जवाब लिस्टिंग टूल के बारे में अधिक हैं। एक यादृच्छिक स्ट्रिंग उत्पन्न करने के लिए उपयोग करने के तरीके का प्रदर्शन करते हुए यहां एक उत्तर जोड़ने पर विचार करें apg
लैंडरोनी

1
कंप्यूटर पर यादृच्छिक संख्या पीढ़ी का उपयोग करने के बारे में सतर्क रहें। कुछ दिखाई देने की तुलना में बहुत कम यादृच्छिक होते हैं, लेकिन 'अच्छा' और 'खराब' यादृच्छिक संख्या पीढ़ी के बीच अंतर बताना काफी कठिन है।
सोब्रीक

@Sobrique छद्म यादृच्छिक संख्या जनरेटर (जैसे /dev/urandom) के बारे में उत्कृष्ट बिंदु । उदाहरण के लिए random.org के आधार पर, सही यादृच्छिक संख्या जनरेटर का उपयोग करके कुछ उत्तर देना अच्छा होगा ।
लैंडरोनी

25
मजाक जवाब: वास्तव में यादृच्छिक स्ट्रिंग उत्पन्न करने के लिए, Emacs (या Vim) के सामने एक नया उपयोगकर्ता रखें और उन्हें बाहर निकलने के लिए कहें। ;)
वाइल्डकार्ड 4

जवाबों:


186

अवांछित पात्रों को हटाने के लिए /dev/urandomएक साथ उपयोग करने से मेरा पसंदीदा तरीका है tr। उदाहरण के लिए, केवल अंक और अक्षर प्राप्त करने के लिए:

head /dev/urandom | tr -dc A-Za-z0-9 | head -c 13 ; echo ''

वैकल्पिक रूप से, OWASP पासवर्ड विशेष वर्ण सूची से अधिक वर्णों को शामिल करने के लिए :

</dev/urandom tr -dc 'A-Za-z0-9!"#$%&'\''()*+,-./:;<=>?@[\]^_`{|}~' | head -c 13  ; echo

यदि आपको trइनपुट के बारे में शिकायत करने में कुछ समस्याएँ हैं , तो इस तरह जोड़ने का प्रयासLC_ALL=C करें:

LC_ALL=C tr -dc 'A-Za-z0-9!"#$%&'\''()*+,-./:;<=>?@[\]^_`{|}~' </dev/urandom | head -c 13 ; echo

15
या ऐसा करें: head /dev/urandom | tr -dc A-Za-z0-9 | head -c10- यह तरीका अधिक सटीक है। आपको 10 वर्ण मिलते हैं जो राजधानियाँ,
कमतर

8
पहला headआदेश समस्याग्रस्त हो सकता है। यह पहली 10 लाइनों को आउटपुट करेगा /dev/urandom, जिसका मतलब है कि यह 10 वीं नईलाइन को देखने के बाद बंद हो जाएगा। तो trकमांड को आउटपुट भेजने की लंबाई यादृच्छिक है। यह संभव है कि आउटपुट में 13 से कम वर्ण होंगे tr। मैंने ऐसा होने की संभावना की गणना नहीं की है, गणना थोड़ी मुश्किल है।
कैसपर्ड

6
बेहतर है कि इसे इस तरह करें:<dev/urandom tr -dc "$charset" | head -c "$length"
PSkocik

3
+1 यहाँ OWASP पासवर्ड विशेष वर्ण पृष्ठ से अन्य वर्णों को शामिल करने का एक त्वरित प्रयास है, जो bash कमांड लाइन के लिए बच गया है:tr -dc A-Za-z0-9\!\"#$\&\'\(\)\*+,-./\:\\\\\;\<=\>\?@[]^_`{\|}~
Rup

2
@ मुझे यकीन नहीं है कि आपके tr ..आदेश के साथ क्या काम नहीं कर रहा है, लेकिन सिर्फ सब कुछ उद्धृत कर रहा है (एकल उद्धरण को छोड़कर) काम करता है - tr -dc 'A-Za-z0-9!"#$%&'\''()*+,-./:;<=>?@[\]^_`{|}~'
केनी एविट

144

एक यादृच्छिक पासवर्ड उत्पन्न करने के लिए जिसका आप उपयोग कर सकते हैं pwgen:

pwgen यादृच्छिक, अर्थहीन लेकिन उच्चारण करने योग्य पासवर्ड उत्पन्न करता है। इन पासवर्डों में या तो केवल लोअरकेस अक्षर होते हैं, या ऊपरी और निचले मामले को मिलाया जाता है, या अंकों को फेंका जाता है। बड़े अक्षरों और अंकों को इस तरह से रखा जाता है कि केवल शब्द को याद करते समय उनकी स्थिति को याद रखना आसान हो जाता है।

लंबाई 13 के 7 पासवर्ड उत्पन्न करें:

geek@liv-inspiron:~$ pwgen 13 7
Eu7Teadiphaec giepahl3Oyaiy iecoo9Aetaib4 phaiChae6Eivi athoo3igee8Co
Iphu4ufeDeelo aesoYi2lie9he 

जैसा कि टिप्पणियों में उल्लेख किया गया है, आप -sतर्क का उपयोग करके एन्ट्रापी को कम करने से बच सकते हैं (अर्थात पासवर्ड को याद रखने के लिए अधिक सुरक्षित, पूरी तरह से यादृच्छिक लेकिन कठिन हैं):

geek@liv-inspiron:~$ pwgen -s 13 7
eAfycrPlM4cYv 4MRXmZmyIVNBp D8y71iqjG7Zq7 FQRHcserl4R8O yRCUtPtV3dsqV
0vJpp2h0OrgF1 QTp7MKtJyTrjz 

यादृच्छिक उपयोगकर्ता नाम उत्पन्न करने के लिए जिनका आप उपयोग कर सकते हैं gpw:

यह पैकेज उच्चारण योग्य पासवर्ड उत्पन्न करता है। यह तीन-अक्षर संयोजन (ट्रिग्राफ) के आँकड़ों का उपयोग करता है जो भी आप इसे खिलाते हैं।

लंबाई 13 के 7 पासवर्ड (उपयोगकर्ता नाम) उत्पन्न करें:

geek@liv-inspiron:~$ gpw 7 13
sreepoidahsas
risadiestinge
ntodynesssine
deodstestress
natinglumperm
riasigentspir
enderiferback

21
पहिए को फिर से नहीं लगाने के लिए +1। यदि आप "उच्चारण योग्य" बाधा के कम एन्ट्रापी नहीं चाहते हैं, तो बस उपयोग करें pwgen -s
नैट एल्ड्रेडगे

122

मैं opensslकमांड का उपयोग कर रहा हूं , क्रिप्टोग्राफी के स्विस सेना चाकू।

openssl rand -base64 12

या

openssl rand -hex 12

10
rand -hexमेरे कीबोर्ड पर 90+ के बजाय आउटपुट को केवल 16 वर्णों तक सीमित कर देगा। बेस 64 बेहतर है क्योंकि यह 64 वर्णों का है, लेकिन यह यादृच्छिक नहीं है (जैसे कि अनुमान लगाने योग्य पैडिंग पैटर्न हैं, और शायद कुछ वर्ण दूसरों के साथ अधिक बार दिखाई देते हैं)।
मार्टिन टूरनोइज

@Carpetsmoker: ध्यान दें कि उदाहरण openssl rand -base64 12आउटपुट के 16 वर्ण बनाता है (क्योंकि 256 मान 64 से मैप किए जाते हैं)। और हेक्स उदाहरण 24 वर्णों का उत्पादन करता है। हेक्स के मामले में कोई नुकसान नहीं है क्योंकि यह एक साधारण 1: 2 मैपिंग है, लेकिन बेस 64 मामले में थोड़ा सा हो सकता है क्योंकि पैडिंग का उपयोग किया जाता है। मूलांक यादृच्छिकता को प्रभावित नहीं करता है, यह एक तरह से दूसरे को मैप किया जाता है। (और कुल बिट संख्या अधिक महत्वपूर्ण है)।
डेनिस विलियमसन

सवाल था "कैसे एक विशिष्ट लंबाई के एक यादृच्छिक स्ट्रिंग उत्पन्न करने के लिए" @ डेनिसविलियम्सन, इसलिए जबकि आपकी टिप्पणी इस तरह से सही है , यह इस प्रश्न के संदर्भ में सही नहीं है ।
मार्टिन टूरनोइज

@Carpetsmoker: उस मामले में, न तो यह जवाब है।
डेनिस विलियमसन

4
यह उत्तर अधिक उत्थान के योग्य है। आपके सिस्टम पर यूरेनियम, pwgen, gpw, आदि उपलब्ध हो सकते हैं या नहीं; विभिन्न वातावरणों में भी, एक नीति जो एक पर काम करती है वह दूसरे पर काम नहीं कर सकती है। यह Opensl नहीं करने के लिए एक सुंदर शिथिलता सेटअप होगा। इससे भी बेहतर: खुलता है रैंड -base64 32 | tr -d / = + | cut -c -16 कि आप 32 चार शून्य से गैर-अल्फ़ान्यू दे देंगे और 16 चार लंबाई तक छंटनी की। एक व्यवस्थापक के रूप में सौदा करना आसान बनाता है। उपयोगकर्ताओं के पास केवल अल्फ़ान्यूम्स होते हैं (जो वे सराहना करते हैं)। लंबाई काफी लंबी है कि विशेष वर्णों को हटाने से एन्ट्रापी पर अत्यधिक प्रभाव नहीं पड़ता है। स्वर्ण।
zentechinc

18

यहाँ है कैसे, मैं यह करता हूँ। यह 10 अक्षर यादृच्छिक स्ट्रिंग उत्पन्न करता है। आप इसे "स्ट्रिंग" के स्थान पर, अन्य स्ट्रिंग प्रसंस्करण टूल के साथ अनुकूलित कर सकते हैं।

cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 10 | head -n 1

1
+1 यह उत्तर पोस्क्ली सही है, /dev/urandomपाठ्यक्रम का उपयोग शून्य से
हेरोल्ड फिशर

12

मानक लिनक्स उपकरणों के साथ उच्चतम एन्ट्रापी संभव के साथ पासवर्ड उत्पन्न करने के लिए जो मेरे द्वारा उपयोग किए जाने वाले हर वितरण में निर्मित होते हैं:

< /dev/urandom tr -cd "[:print:]" | head -c 32; echo

यह ASCII के सभी प्रिंट करने योग्य वर्ण - 32 (स्पेस) से 126 (टिल्ड ~) , तक आउटपुट करता है । पासवर्ड लंबाई के साथ नियंत्रित किया जा सकता headहै -cझंडा। इसमें अन्य संभावित चरित्र सेट भी हैं tr(स्थान को शामिल नहीं करने के लिए, केवल वर्ण 33-126, उपयोग करें [:graph:])।


1
यह किस तरह से मौजूदा उत्तरों से अलग है? विशेष रूप से, हर्बर्ट के दिमाग में आता है।
फॉक्स

3
@ फ़ॉक्स उसका समाधान पात्रों की हार्डकोड सूची का उपयोग करता है, जो कोड पठनीयता, कॉम्पैक्टनेस और स्वच्छता के कारण प्रोत्साहित प्रोग्रामिंग अभ्यास नहीं है। इसके अलावा, कुछ विशेष मुद्रण योग्य ASCII पात्रों को बैश द्वारा व्याख्या किया जा सकता है, न कि उनके एक लाइनर के सबसे स्पष्ट दोष का उल्लेख करने के लिए - यदि अधिकतम एन्ट्रापी वांछित है, तो क्या कोई यह सुनिश्चित कर सकता है कि सभी उपलब्ध वर्ण सूची में शामिल हैं? और ऐसा कोई डुप्लिकेट नहीं है जो संभवतः ट्र के व्यवहार को बदल सकता है? जब से आपने पूछा उसका जवाब मेरे द्वारा प्रतिस्थापित किया जाना चाहिए :)
dr

2
बहुत से नहीं अगर अधिकांश वेब साइटों पर ऐसे अक्षरों पर प्रतिबंध है जो एक पासवर्ड में हो सकते हैं, तो हार्ड कोडिंग '[: प्रिंट:]' OWASP पासवर्ड विशेष चरित्र सूची में हार्ड-कोडिंग की तुलना में मेरे लिए कोई बेहतर नहीं लगता है। मुझे लगता है कि यहां लगभग हर उत्तर को एक चर का उपयोग करके सुधार किया जा सकता है, लेकिन यह इतना मामूली बदलाव है कि मैं केवल एक संपादन का सुझाव दूंगा
फॉक्स

1
< /dev/urandom tr -cd '[:graph:]'| tr -d '\\' | head -c 32; echoयदि आप नहीं चाहते हैं ` characters in generated string. `क्योंकि कई भाषाओं में एक बच चरित्र है समस्याओं का कारण बनता है
मेज़बब

< /dev/urandom tr -cd "[:print:]" | tr -d ' \\/\`\|' | head -c 32; echoबाहर करने के लिए | \ / `और अंतरिक्ष
रयान क्रेज

9

आप चाहते हैं यादृच्छिकता के स्तर के आधार पर, आप बस बैश के साथ जा सकते हैं ( zshऔर भी ksh, संभवतः अन्य) बिलियन $RANDOMवैरिएबल:

$ echo $RANDOM | tr '[0-9]' '[a-z]'
bfeci
$ echo $RANDOM | tr '[0-9]' '[a-z]'
cijjj

सीधे से पढ़ने के तरीके /dev/urandomबहुत सरल हैं, लेकिन पूरा होने के लिए, आप भी उपयोग कर सकते हैं $RANDOM:

echo $(for((i=1;i<=13;i++)); do printf '%s' "${RANDOM:0:1}"; done) | tr '[0-9]' '[a-z]'

महत्वपूर्ण : यह समाधान वर्णमाला के पहले 10 अक्षरों का उपयोग करके केवल यादृच्छिक तारों का उत्पादन करेगा। आपके लिए पर्याप्त है या नहीं, इस बात पर निर्भर करता है कि आपको इसके लिए क्या चाहिए।


आप उत्पन्न स्ट्रिंग की लंबाई को कैसे नियंत्रित करते हैं?
लैंड्रोनी

@landroni मुझे नहीं लगता कि जब तक आपको सही लंबाई नहीं मिलती, तब तक आप एक लूप का उपयोग नहीं कर सकते। $RANDOM0 और 32767. बीच की एक संख्या प्रिंट होगा
terdon

मैंने लगभग 20 बार कमांड चलाने की कोशिश की है, और मुझे 4-5 वर्णों से अधिक लंबे समय तक कुछ भी नहीं मिल सकता है ...
लैंड्रोनी

2
@landroni धन्यवाद, मैंने लंबाई निर्दिष्ट करने का एक तरीका जोड़ा है लेकिन यह बहुत अच्छा नहीं है। मैं rand=$(head -c 100 /dev/urandom | tr -dc A-Za-z0-9 | head -c13)इसके बजाय कुछ का उपयोग करना चाहते हैं।
terdon

1
@SkippyleGrandGourou बहुत अच्छी बात है। मैंने इसे उत्तर में जोड़ा, धन्यवाद।
terdon

8

पाब्लो रेपेट्टो से प्रेरित होकर मैं इस आसान से समाधान को याद करता हूं :

shuf -zer -n20  {A..Z} {a..z} {0..9}

-z मल्टी लाइन आउटपुट से बचा जाता है

-इसका परिणाम प्रतिध्वनित करें

-या किसी भी वर्ण को कई बार प्रकट होने दें

20 अक्षरों की लंबाई के साथ -20 यादृच्छिक स्ट्रिंग

{A..Z} {a..z} {0..9} ने चार वर्गों की अनुमति दी

shuf लिनक्स कोरुटिल्स का हिस्सा है और व्यापक रूप से उपलब्ध है या कम से कम पोर्ट किया गया है।


5

@ ब्रैंडिन ने एक टिप्पणी में बताया कि कैसे उपयोग करने से अधिकतम 100 बाइट्स प्राप्त /dev/urandomकरें head -c 100। ऐसा करने का एक और तरीका है dd:

tr -dc A-Za-z0-9 < /dev/urandom | dd bs=100 count=1 2>/dev/null

2>/dev/nullके अंत में ddआदेश को दबाने के लिए उत्पादन "... में / ... रिकॉर्ड रिकॉर्ड" है।

मैं इन दो तरीकों के बीच किसी भी पर्याप्त फायदे / नुकसान से अवगत नहीं हूं।

मेरे पास trइनपुट के बारे में शिकायत करने के दोनों तरीकों के साथ एक मुद्दा था । मुझे लगा कि यह था, क्योंकि यह द्विआधारी इनपुट प्राप्त पसंद नहीं था, और इसलिए पहले छानने सुझाव /dev/randomके साथ iconv -c -t US। हालांकि, गिल्स ने एक अलग निदान और समाधान का सुझाव दिया, जो मेरे लिए काम करता है:

LC_ALL=C tr -dc A-Za-z0-9 </dev/urandom | dd bs=100 count=1 2>/dev/null

किसी कारण से iconvसमाधान एक सीपीयू कोर को
अधिकतम

मेरे उबंटू में 14.04 सिस्टम आइकनव libc-bin2.19 द्वारा प्रदान किया गया है । मुझे यकीन नहीं है कि यह एक ही iconv है ...
landroni

trबाइनरी इनपुट का समर्थन करता है। हालाँकि, जैसी श्रेणी A-Zस्थानीय सेटिंग से प्रभावित हो सकती है। कोशिश करेंLC_ALL=C tr …
गाइल्स

1
@ ग्लिस पोसिक्स के अनुसार यह "बाइनरी इनपुट का समर्थन नहीं करता" है। केवल GNU trकरता है क्योंकि यह मल्टीबाइट का समर्थन नहीं करता है (उदाहरण के लिए पिछली बार मैंने इसे बदलते हुए मामले को हर बाइट के छठे बिट को सेट करके लागू किया था)। अन्य प्रणालियाँ (जैसे BSD) मल्टीबाइट का समर्थन करती हैं और यह वहाँ से विफल हो जाएगी क्योंकि मौका है कि एक यादृच्छिक इनपुट स्ट्रीम भी एक वैध मल्टीबीट स्ट्रीम है जो अधिकांश एन्कोडिंग में बहुत छोटा है। जीएनयू किसी भी समय मल्टीबाइट समर्थन जोड़ सकता है , जिस बिंदु पर यह विफल हो जाएगा। निश्चित रूप से, सेटिंग LC_ALL=Cठीक कर देगी।
मार्टिन टूरनोइज

@Carpetsmoker POSIX को trबाइनरी इनपुट (सी लोकेल में) प्रोसेस करने की आवश्यकता होती है। (ठीक है, ठीक है, यह केवल कहते हैं स्पष्ट है कि रिक्त बाइट्स समर्थित होना है, यह नहीं कहा गया है कि एक नई पंक्ति चरित्र के साथ समाप्त नहीं गैर खाली फ़ाइलों का समर्थन किए जाने की कर रहे हैं, लेकिन व्यवहार में हमेशा मामला है कि रूप में अच्छी तरह।)
गिल्स

4

APG कुछ लिनक्स वितरण पर डिफ़ॉल्ट रूप से शामिल है।

5 से 10 से उप-वर्ग विशेष, न्यूमेरिक, कैपिटल और लोअर में पासवर्ड उत्पन्न करने के लिए, कमांड है:

apg -MSNCL -m 5 -x 10

और लौटता है

@OpVeyhym9
3:Glul
3DroomIc?
hed&Os0
NefIj%Ob3
35Quok}

जैसा कि टिप्पणी में @landroni ने कहा है।


1
यहाँ कई विशेष वर्णों वाले यादृच्छिक 14 पत्र पासवर्ड उत्पन्न करने के विकल्प दिए गए हैं:apg -a1 -m14
neuhaus

3

आप ऐसे किसी एक md5उपकरण का उपयोग कर सकते हैं जिसका यह उद्देश्य ठीक है। पूरी तरह से यादृच्छिक पासवर्ड बनाने के मामले में आप इसका उपयोग कर सकते हैं md5pass। यह उपयोग करने के लिए एक बहुत ही सरल उपकरण है और बहुत उपयोगी है, क्योंकि आप "सामान्य पाठ" का उपयोग एक "नमक" के साथ एक ही पासवर्ड के जंप-बिट निर्माण के लिए कर सकते हैं जिसे आप बाद में पुनर्प्राप्त कर सकते हैं, या वैकल्पिक रूप से आप पूरी तरह से प्राप्त करना चाहते हैं। हर समय यादृच्छिक पासवर्ड। सामान्य उपयोग है:

md5pass [password] [salt]

जहां passwordएक चुना हुआ शब्द है जिसका उपयोग यादृच्छिक स्ट्रिंग के निर्माण के लिए किया जाएगा और इसका उपयोग करने के लिए saltबाइट्स में कूद है। ऐशे ही:

md5pass word

$1$.MUittVW$j.XDTF1QRnxqFdXRUiSLs0

यह आपको उपयोग करने के लिए एक "यादृच्छिक अनुक्रम" पासवर्ड बनाएगा। यदि आप नहीं का उपयोग करते हैं salt, तो आप बाद में इसी स्ट्रिंग को फिर से बनाने में सक्षम नहीं हो सकते हैं।

हालांकि अगर आप saltइस तरह का उपयोग करते हैं:

md5pass word 512

$1$512$.0jcLPQ83jgszaPT8xzds0

तब आप एक अनुक्रम बना सकते हैं जिसे आप पुनर्प्राप्त कर सकते हैं यदि आप उसी नमक (या कूद) के साथ संयोजन में शब्द का उपयोग करते हैं यदि यह मूल रूप से परिभाषित किया गया था।


जब एक saltका उपयोग किया जा रहा है, तो यह
पासवर्डमेकर

-हाँ मई एक निर्माता पासवर्ड के समान लग रहा है, लेकिन अंतर यह है कि यह एक वाणिज्यिक कार्यक्रम या कुछ भी नहीं है, क्योंकि md5 उपकरण, "md5pass, md5sum, md5sum.textutils" का सेट यहाँ से संबंधित है और सिस्टम उपलब्ध हैं किसी कीमत पर नहीं !!!
जोक सीन। ओके

मैं वास्तव में मन में था PasswordMaker है, जो भी खुला स्रोत और गैर वाणिज्यिक है।
बारूदी

3

xxdलंबाई निर्दिष्ट करने के लिए कमांड का उपयोग करें (-l के माध्यम से) जो लिनक्स और ओएस दोनों में काम करता है। https://www.howtoforge.com/linux-xxd-command/

xxd -l16 -ps /dev/urandom

2

ये दोनों कमांड क्रमशः रैंडम पासवर्ड और पासफ्रेज उत्पन्न करते हैं।

shuf --random-source=/dev/urandom --repeat --head-count=20 file_with_characters | tr --delete '\n'

shuf --random-source=/dev/urandom --repeat --head-count=7 file_with_words | tr '\n' ' '

पासवर्ड जनरेटर के लिए एक file_with_characters की आवश्यकता होती है जिसमें वे सभी वर्ण होते हैं जो आप पासवर्ड का उपयोग करना चाहते हैं, प्रति पंक्ति एक वर्ण, और प्रत्येक बार ठीक एक बार। फ़ाइल में रिक्त लाइनें नहीं होनी चाहिए, और लाइनों को नई-पंक्तिबद्ध होना चाहिए।

पासफ़्रेज़ जनरेटर के लिए एक file_with_words की आवश्यकता होती है जिसमें वे सभी शब्द होते हैं जिन्हें आप पासफ़्रेज़ का उपयोग करना चाहते हैं, प्रति पंक्ति एक शब्द और प्रत्येक बार ठीक एक बार। फ़ाइल में रिक्त लाइनें नहीं होनी चाहिए, और लाइनों को नई-पंक्तिबद्ध होना चाहिए।

- हेड-काउंट विकल्प पासवर्ड की लंबाई निर्दिष्ट करता है - वर्णों में - या पासफ़्रेज़ - शब्दों में।


1

मैंने पाया है कि macOS पर tr करने के लिए पाइपिंग / dev / urandom काम नहीं करता था। यहाँ एक और तरीका है:

set="abcdefghijklmonpqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
n=6
rand=""
for i in `seq 1 $n`; do
    char=${set:$RANDOM % ${#set}:1}
    rand+=$char
done
echo $rand

मेरे उत्तर के अंतिम उदाहरण की जाँच करें। यह tr का उपयोग नहीं करता है। unix.stackexchange.com/a/494931/203075
जिबरी

1

मैं उपयोग करता हूं:

base64 < /dev/urandom | tr -d 'O0Il1+\' | head -c 44

इससे मुझे 57 संभावित किरदार मिलते हैं। स्ट्रिंग को कॉपी-पेस्ट (हटाया ) और मुद्रित किया जा सकता है +और \वर्णों को अलग करने के लिए मुश्किल ( I1lO0) हटा दिया गया है।

  • 44 वर्ण मुझे देता है: लॉग 2 (57 44 )> 256.64 बिट्स एन्ट्रापी
  • 22 अक्षर मुझे देते हैं: लॉग 2 (57 22 )> 128.32 बिट्स एन्ट्रापी

मुझे यह पसंद है क्योंकि:

  • कमांड टाइप करने के लिए सरल और यादगार है
  • यह मानक सिस्टम टूल का उपयोग करता है - कोई अतिरिक्त बायनेरी नहीं
  • अधिक यादृच्छिकता को "बर्बाद" नहीं करता है (यह यादृच्छिक बिट्स का 89% का उपयोग करता है जो ~ ~ 24% समाधान के लिए सीधे पाइपिंग के लिए टीआर पर)
  • 22 और 44 अक्षर दो ब्रेकपॉइंट्स की सामान्य शक्ति (अच्छी तरह से ऊपर भी) जोड़े
  • आउटपुट को आसानी से चुना जा सकता है और न्यूनतम मानव त्रुटि दर के साथ चिपकाया या मुद्रित और पुनर्प्राप्त किया जा सकता है
  • हेक्स एनकोडेड (22 और 44 के बजाय 32 और 64) समाधान जैसे md5sum / sha1sum इत्यादि।

करने के लिए क्रेडिट https://unix.stackexchange.com/a/230676/9583 और विशेष रूप से मेरे शुरुआती प्रेरणा के लिए टिप्पणी नहीं।


आप अगर जरूरत संख्या / विशेष वर्ण - आम तौर पर वहाँ एक नंबर, नहीं तो आप सुरक्षित रूप से जोड़ सकते हैं हो जाएगा 1एन्ट्रापी को कम करने (जबकि एक w / एक नंबर पाने के लिए एक नया एक पैदा करने के बिना करता एन्ट्रापी को कम)। आप !एन्ट्रापी को कम किए बिना सुरक्षित रूप से जोड़ सकते हैं । न तो योजना किसी भी चीज के लिए एंट्रॉपी बढ़ाती है, बल्कि पुराने पासवर्ड आवश्यकताओं के अनुपालन में उत्पन्न स्ट्रिंग को भी ला सकती है।
इरिडन

1

"कई छोटे उपकरण जो एक काम अच्छी तरह से करते हैं" का यूनिक्स दर्शन इस मामले में आपकी बहुत अच्छी तरह से सेवा करता है।

  • /dev/urandomयादृच्छिक "बाइट्स" की एक धारा है (जिसमें गैर-मुद्रण योग्य वर्ण शामिल हैं)
  • base64 में बाइट डेटा सांकेतिक शब्दों में बदलना [A-Za-z0-9/+] (जो पूरी तरह से मुद्रण योग्य है)
  • dd तर्कों के रूप में दिए गए आउटपुट को लागू करने वाले इनपुट को कॉपी करता है (जिसमें ब्लॉक आकार और ब्लॉक गणना शामिल हो सकती है)

OSX

base64     < /dev/urandom | dd bs=1k count=1

लिनक्स

base64 -w0 < /dev/urandom | dd bs=1k count=1

टिप्पणियाँ:

  • यदि आपको वर्णों के सबसेट की आवश्यकता है, तो आप पाइप में एक संशोधक सम्मिलित कर सकते हैं।
    • Ex: tr -d '[A-Z/+]'पूंजी अक्षरों से छुटकारा पाने के लिए +और/
  • आप bs(ब्लॉक आकार) सेट कर सकते हैं जो भी लंबाई की जरूरत है।
  • लिनक्स पर, base64डिफ़ॉल्ट रूप से 76 स्तंभों को लपेटता है और -w0जब तक आप नहीं चाहते तब तक इसे रीसेट करना चाहिए ।

1

मैं पासवर्ड बनाने के लिए अपनी सामान्य कमांड का योगदान करना चाहूंगा

$ cat /dev/urandom | base64 | head -n 1 |tr -dc '[:alnum:]' |cut -c -13
b0R55751vWW9V

पासवर्ड की लंबाई को कॉन्फ़िगर करने के लिए, कट कमांड में संख्या को उस लंबाई में बदलें, जिसकी आपको आवश्यकता है, उदाहरण के लिए, 24 वर्ण

$ cat /dev/urandom | base64 | head -n 1 |tr -dc '[:alnum:]' |cut -c -24
WFBhVHuKbrnRhd5kdWXPzmZG

0 या O, 1 या l को भ्रमित नहीं करना चाहते? इसे दूसरे से छान लेंtr

$ cat /dev/urandom | base64 | head -n 1 |tr -dc '[:alnum:]' | tr -d '0O1l'|cut -c -24
JuCphwvhrhppD9wVqfpP2beG

मैं व्यक्तिगत रूप से पासवर्ड में विशेष चरित्र को कभी पसंद नहीं करता, यही कारण है कि मैं केवल [:alnum:]अपने पासवर्ड जनरेटर के लिए चुनता हूं


0

मैं secpwgenअल्पाइन लिनक्स में बनाए रखता हूं और अपने गितुब पर स्रोतों को रखता हूं

यह यादृच्छिक स्ट्रिंग्स या डाइक्वेयर वाक्यांशों का उत्पादन कर सकता है:

musl64 [~]$ secpwgen
USAGE: secpwgen <-p[e] | -A[adhsy] | -r | -s[e]> N

PASSPHRASE of N words from Diceware dictionary
  -p    generate passphrase
  -pe   generate enhanced (with symbols) passphrase

SKEY PASSWORD of N words from S/Key dictionary
  -s    generate passphrase
  -se   generate enhanced (with symbols) passphrase

ASCII RANDOM of N elements (at least one option MUST be present)
  -A    Each letter adds the following random elements in output:
    a    alphanumeric characters
    d    decimal digits
    h    hexadecimal digits
    s    special characters
    y    3-4 letter syllables

RAW RANDOM
  -r    output BASE64 encoded string of N random BITS
  -k    output koremutake encoding of N random BITS

एक 13 वर्ण यादृच्छिक स्ट्रिंग उत्पन्न करने के लिए, जिसका आप उपयोग करेंगे:

musl64 [~]$ secpwgen -Aas 13
----------------
WK5#*V<]M3<CU ;ENTROPY=67.21 bits
----------------
INFO: destroying random number generator.
INFO: zeroing memory.

musl64 [~]$ secpwgen -Aa 13
----------------
GP0FIEBM9Y3BT ;ENTROPY=67.21 bits
----------------
INFO: destroying random number generator.
INFO: zeroing memory.

उपयोगकर्ताओं को पासवर्ड याद रखने के लिए डाइकवेयर वाक्यांशों का उपयोग करें:

musl64 [~]$ secpwgen -p 5
----------------
wq seen list n8 kerr  ;ENTROPY=65.00 bits
----------------
INFO: destroying random number generator.
INFO: zeroing memory.

मुझे व्यक्तिगत रूप से पसंद है:

musl64 [~]$ secpwgen -r 512
----------------
h62lL7G4gwh3/j9c7YteQvVXoqJrQKKPWVR3Lt7az36DcfWZWtUgBT19iwmJBwP4UahNzPe7qYD7OcklUFpCzQ== ;ENTROPY=512.00 bits
----------------
INFO: destroying random number generator.
INFO: zeroing memory.

0

एक बहुत ही सुरक्षित पासवर्ड के लिए मेरा रास्ता (जहाँ 16 pw लंबाई है):

cat /dev/urandom | tr -cd [:graph:]|head -c 16

उदाहरण परिणाम:

jT@s_Nx]gH<wL~W}

या वैकल्पिक रूप से, कई पासवर्ड उत्पन्न करने के लिए:

बिल्ली / देव / उर्जित | tr -cd [: graph:] | fold -w 16 | हेड -6 |

उदाहरण परिणाम:

7ck%G7'|f&}_8(]s
<?*]E.CG[NB'gK#A
:tF-WPTOa3!i7S(h
2xy(>=%3=Kb1B$`6
*98Lf{d?Jzb}6q1\
E7uCEAN2Hz]]y|5*

थोड़ा कम सुरक्षित (छोटा वर्ण सेट):

cat /dev/urandom |base64 -w 0|fold -w 16|head -6

उदाहरण परिणाम:

rJqYxYZLOTV+A45w
PUKQ+BoBf6yfZw5m
+LRfpsN9CsLRiN8V
yMS6zDpL6NHmG17s
yTUWPG7Rum97schi
cognvjVwaKaAyPRK

-1

एक सुपर आसान और सरल (संभवतः आप की तुलना में अधिक सरल है) इसे प्राप्त करने का तरीका किसी दिए गए रेंज में एक यादृच्छिक संख्या उत्पन्न करने के लिए होगा, उस संख्या को उसके समतुल्य ASCII वर्ण में परिवर्तित करें, और इसे एक स्ट्रिंग के अंत में संलग्न करें। ।

यहाँ पायथन में एक मूल उदाहरण दिया गया है:

import random # import random library  
passFile = open("passwords.txt", 'w') # create file passwords.txt
passNum = int(input("Number of passwords: ")) # get number of  passwords
passLength = int(input("Password length: ")) # get length of passwords  
for i in range(passNum):
    password = "" # reset password
    for i in range(passLength):
        num = random.randint(65, 122) # get random number
        while num in range(91, 97): # Don't include punctuation
            num = random.randint(65, 122)
        password += chr(num) # add character to current password 
    passFile.write(password + "\n") # add current password to file  
passFile.close() # close file

संपादित करें: कई पासवर्ड बनाने और उन्हें एक फ़ाइल में लिखने के लिए टिप्पणियाँ, और जोड़ा गया कोड


3
अगर पायथन की शक्ति दी जाए तो मैं इसे इस तरह से नहीं करूंगा। यह एक स्ट्रिंग पर शामिल होने का उपयोग करना बहुत आसान होगा जिसमें पासवर्ड के लिए सभी वर्ण मान्य हों और वर्णों का चयन करने के लिए यादृच्छिक का उपयोग कर रहे हों।
माइक मैकमोहन


-2

मुझे यह कमांड पसंद है:

date +%s | sha256sum | base64 | head -c 12

1
मैं इसके बजाय अधिक यादृच्छिक नैनोसेकेंड दृष्टिकोण का उपयोग करूंगा: date +%N चूंकि यदि आप किसी स्क्रिप्ट में कई उपयोगकर्ता और पासवर्ड उत्पन्न करते हैं, तो सेकंड कई या सभी दिनांक आदेशों के लिए समान हो सकते हैं, इस प्रकार समान पासवर्ड का उत्पादन कर सकते हैं।
जॉन मेयर

1
@ जॉनमनोर: क्या यह दृष्टिकोण अधिक मजबूत है dd if=/dev/random bs=512 count=1:?
यूजेन कोनकोव

8
यह उत्तर अत्यधिक खतरनाक है! आप एक ज्ञात बीज से पासवर्ड उत्पन्न करते हैं जो भविष्यवाणी करना आसान है। मैं पिछले वर्षों की इस पद्धति का उपयोग करके उत्पन्न सभी पासवर्ड उत्पन्न कर सकता हूं और इस सूची का उपयोग ब्रूट फोर्सिंग उद्देश्यों के लिए कर सकता हूं।
फ्लो

-4

मैं जाता हूं, http://passwordsgenerator.net/ पर, यह 2048 वर्णों तक के यादृच्छिक वर्णों के तार पैदा करने की अनुमति देता है, ऊपरी मामले, निचले मामले, 0 से 9 तक अंक, विराम चिह्न या किसी भी संयोजन का चयन करता है।


2
मैंने यह स्पष्ट करने के लिए प्रश्न को स्पष्ट किया है कि ऑफ-लाइन जनरेट किए गए तार बेहतर हैं। किसी वेबसाइट पर सीधे पासवर्ड बनाना, खासकर अगर कनेक्शन HTTPS नहीं है (जैसा कि आपके उत्तर में है), सुरक्षित नहीं है।
लैंड्रोनी सेप

1
इंटरनेट से एक यादृच्छिक पासवर्ड प्राप्त करना बहुत ही मूर्खतापूर्ण और अनुभवहीन है। किसी को अब आपके द्वारा किसी सेवा या साइट के लिए उपयोग किया जाने वाला पासवर्ड और आपके बारे में अनन्य व्यक्तिगत विवरण (आईपी पता, ब्राउज़र / पर्यावरण जानकारी) पता है। यह साइट अब आपके बारे में एकत्रित अन्य डेटा के साथ जानकारी को पार कर सकती है। उदाहरण के लिए, आपने एक बार मेलिंग सूची में पोस्ट किया है, आपका आईपी पता मेल के हेडर में है, इसलिए अब हमारे पास एक पासवर्ड, नाम और एक ईमेल पता है ... आप वास्तव में अपने पासवर्ड के साथ यादृच्छिक अजनबियों पर भरोसा कर रहे हैं।
मार्टिन टूरनोइज
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.