Rasgele bir dize nasıl oluşturulur?


209

Rasgele bir dize (örneğin şifreler, kullanıcı adları, vb.) Oluşturmak istiyorum. İstenilen uzunluğu belirlemek mümkün olmalıdır (örneğin 13 karakter).

Hangi araçları kullanabilirim?

(Güvenlik ve gizlilik nedenleriyle, bir web sitesinde çevrimiçi olmanın aksine, dizgelerin çevrimdışı oluşturulması tercih edilir.)


1
AskUbuntu'da zaten iyi cevaplar var . (Şahsen kullanırım apg.)
Sparhawk

1
@Sparhawk AskUbuntu soru / cevap araçları listeleme hakkında daha fazla. Lütfen buraya rastgele bir dize oluşturmak için nasıl kullanılacağını gösteren bir cevap eklemeyi düşünün apg.
landroni 20:15

1
Bilgisayarlarda rasgele sayı üretme konusunda dikkatli olun. Bazıları göründüklerinden çok daha az rastlantısaldır, ancak 'iyi' ve 'kötü' rastgele sayı üretimi arasındaki farkı söylemek oldukça zordur.
Sobrique

@Sobrique Sözde rasgele sayı üreteçleri hakkında mükemmel bir nokta (örn. /dev/urandom). Örneğin random.org'a dayalı, gerçek rasgele sayı üreteçlerini kullanarak bazı cevaplar almak güzel olurdu .
landroni 21:15

25
Şaka cevabı: Gerçekten rastgele bir dize oluşturmak için Emacs'in (veya Vim) önüne yeni bir kullanıcı yerleştirin ve onlardan çıkmalarını isteyin. ;)
Wildcard 4

Yanıtlar:


186

En sevdiğim yol, istenmeyen karakterleri silmek için /dev/urandombirlikte kullanmaktır tr. Örneğin, yalnızca rakam ve harfleri almak için:

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

Alternatif olarak, OWASP şifresi özel karakterler listesinden daha fazla karakter eklemek için :

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

trGirdiyle ilgili şikayetlerde sorun yaşıyorsanız , şöyle eklemeyi deneyinLC_ALL=C :

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

15
Veya şunu yapın: head /dev/urandom | tr -dc A-Za-z0-9 | head -c10- Bu yol daha doğrudur. Büyük harf, düşürücü veya rakam olan 10 karakter alırsınız
Brandin

8
İlk headkomut problemli olabilir. İlk 10 satırı çıkarıyor /dev/urandom, yani 10. yeni satırı görünce duracak. Yani trkomuta gönderilen çıkışın uzunluğu rastgeledir. Çıkışta 13 karakterden daha az olması mümkündür tr. Bunun olma olasılığını hesaplayamadım, hesaplamalar biraz zor.
kasperd

6
Böyle <dev/urandom tr -dc "$charset" | head -c "$length"
yapsan

3
+1 İşte bash komut satırı için kaçan OWASP şifresi özel karakterler sayfasındaki diğer karakterleri eklemek için hızlı bir girişim :tr -dc A-Za-z0-9\!\"#$\&\'\(\)\*+,-./\:\\\\\;\<=\>\?@[]^_`{\|}~
Rup

2
@Rup Komutunuzla neyin işe yaramadığından emin değilim tr ..ama sadece her şeyden alıntı yapın (tek alıntı hariç) çalışır - tr -dc 'A-Za-z0-9!"#$%&'\''()*+,-./:;<=>?@[\]^_`{|}~'.
Kenny Evitt

144

Rasgele bir şifre oluşturmak için kullanabilirsiniz pwgen:

pwgen, rastgele, anlamsız ama belirgin şifreler üretir. Bu parolalar yalnızca küçük harfler veya büyük ve küçük harfler karışık veya içine atılan rakamlar içerir. Büyük harfler ve rakamlar, yalnızca kelimeyi ezberlerken konumlarını hatırlamayı kolaylaştıracak şekilde yerleştirilir.

13 uzunluğunda 7 şifre oluşturun:

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

Yorumlarda belirtildiği gibi, -sargümanı kullanarak entropiyi azaltmaktan kaçınabilirsiniz (yani daha güvenli, tamamen rasgele fakat hatırlanması zor şifreler oluşturabilirsiniz):

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

Rasgele kullanıcı adları oluşturmak için kullanabileceğiniz gpw:

Bu paket belirgin şifreler oluşturur. Beslediğiniz sözlüklerden alınan üç harfli kombinasyonların (trigraph) istatistiklerini kullanır.

13 uzunluğunda 7 şifre (kullanıcı adı) oluşturun:

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

21
Tekerleği yeniden icat etmediğim için +1. "Belirgin" kısıtlamanın azaltılmış entropisini istemiyorsanız, basitçe kullanın pwgen -s.
Nate Eldredge

123

Şifreyi kullanıyorum, opensslşifreli İsviçre çakısı.

openssl rand -base64 12

veya

openssl rand -hex 12

10
rand -hexçıktıları klavyemdeki 90+ ​​yerine 16 karakterle sınırlayacak. base64 daha iyi çünkü 64 karakterden oluşuyor, fakat rastgele değil (örn. tahmin edilebilir dolgu desenleri vardır ve belki de bazı karakterler diğerlerinden daha sık görülür).
Martin Tournoij,

@Carpetsmoker: Örnekte openssl rand -base64 1216 karakterlik çıktı ürettiğine dikkat edin (çünkü 256 değer 64 ile eşlenmiştir). Ve onaltılık örnek 24 karakter üretir. Basit durumda 1: 2 haritalama olduğundan onaltılık durumda bir kayıp olmaz, ancak dolguda kullanıldığı için base64 durumunda çok az olabilir. Sayı tabanı rasgeleliği etkilemez, birinin bir diğeriyle eşlenen şeklidir. (ve toplam bit sayısı çok daha önemlidir).
Dennis Williamson

Sorusu yorumunuz doğru ise, yani @DennisWilliamson "Belirli uzunluk rastgele dize oluşturmak için nasıl" olduğunu gibi , bu doğru değil bu soruya bağlamında .
Martin Tournoij

@Carpetsmoker: Bu durumda, bu cevap da değil.
Dennis Williamson

4
Bu cevap daha fazla yükseltmeyi hak ediyor. urandom, pwgen, gpw, vb. sisteminizde mevcut olabilir veya bulunmayabilir; ayrıca farklı ortamlarda, bir başkasında çalışan bir politika diğerinde çalışmaz. Openssl'a sahip olmamak oldukça işlevsiz bir kurulum olacaktır. Daha da iyisi: openssl rand -base64 32 | tr -d / = + | cut -c -16 Bu size 32 karakter eksi alfanum olmayanlar verecek ve 16 karakter uzunluğunda kesilmiş olacak. Yönetici olarak başa çıkmayı kolaylaştırır. Kullanıcılar sadece alfanumlara sahiptir (takdir etme eğilimindedirler). Uzunluk, özel kömürlerin çıkarılmasının entropiyi aşırı derecede etkilemeyeceği kadar uzundur. Altın.
zentechinc

18

İşte böyle yapıyorum. 10 karakter rastgele dize oluşturur. "String" i başka dize işleme araçlarıyla değiştirerek optimize edebilirsiniz.

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

1
+1 Bu cevap POSIXly doğrudur, eksi /dev/urandomelbette kullanımı
Harold Fischer

12

Kullandığım her dağıtımın içine yerleştirilmiş standart Linux araçlarıyla mümkün olan en yüksek entropiye sahip şifre oluşturmak için:

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

Bu, tüm ASCII yazdırılabilir karakterlerini çıktılar - 32 (boşluk) ile 126 (tilde, ~). Şifre uzunluğu head' -cflag ' ile kontrol edilebilir . İçinde başka olası karakter kümeleri de vardır tr(boşluk içermemesi, sadece 33-126 karakterleri kullanılması [:graph:]).


1
Bu, mevcut cevaplardan hangi şekilde farklıdır? Özellikle, herbert akla geliyor.
Fox,

3
@Fox Onun çözümü kod okunabilirliği, kompaktlık ve temizlik nedeniyle teşvik edilen bir programlama uygulaması olmayan, kodlanmış karakter listesini kullanır. Ayrıca bazı özel ASCII karakterleri bash ile yorumlanabilir, bir astarının en belirgin dezavantajından bahsetmeden değil - eğer maksimum entropi istenirse, mevcut tüm karakterlerin listeye dahil edildiğinden emin olunabilir mi? Ve tr'in davranışını değiştirebilecek hiçbir kopyası yok mu? Cevabı sizden beri benim
tarafımdan

2
Pek çok web sitesi şifrenizde olabilecek karakterlerle ilgili kısıtlamalara sahip değilse, bu yüzden '[: print:]' yazısının kodlanması, OWASP şifresi özel karakter listesinin kodlanmasından daha iyi değil. Buradaki hemen hemen her cevabın bir değişken kullanılarak iyileştirilebileceğini hissediyorum, ancak bu sadece bir düzenleme önereceğim kadar küçük bir değişiklik
Fox

1
< /dev/urandom tr -cd '[:graph:]'| tr -d '\\' | head -c 32; echoistemiyorsanız ` characters in generated string. `çünkü birçok dilde bir kaçış karakteri sorunlara neden oluyor
mzzzzb

< /dev/urandom tr -cd "[:print:]" | tr -d ' \\/\`\|' | head -c 32; echodışlamak | \ / `ve boşluk
Ryan Krage

9

İstediğiniz rastgelelik seviyesine bağlı olarak, basitçe bash (ayrıca zshve kshmuhtemelen başkaları) yerleşik $RANDOMdeğişkenine gidebilirsiniz :

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

Doğrudan okuma yöntemleri /dev/urandomçok basittir, ancak tamamlama uğruna şunları da kullanabilirsiniz $RANDOM:

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

Önemli : Bu çözüm yalnızca alfabenin ilk 10 harfini kullanarak rasgele dizeler üretecektir. Bunun sizin için yeterli olup olmadığı, bunun için neye ihtiyacınız olduğuna bağlıdır.


Oluşturulan dizenin uzunluğunu nasıl kontrol edersiniz?
landroni

@landroni Doğru uzunluğu elde edene kadar bir döngü kullanmaktan mahrum kalacağınızı sanmıyorum. $RANDOM0 ile 32767 arasında bir sayı yazdırır.
terdon

Bu komutu 20 defa çalıştırmayı denedim ve hiçbir zaman 4-5 karakterden daha uzun bir şey elde edemiyorum ...
landroni

2
@landroni teşekkürler, uzunluk belirtmek için bir yol ekledim ama çok iyi değil. Bunun rand=$(head -c 100 /dev/urandom | tr -dc A-Za-z0-9 | head -c13)yerine sadece bir şey kullanırdım.
terdon

1
@ SkippyleGrandGourou çok iyi bir nokta. Bunu cevaba ekledim, teşekkürler.
terdon

8

Pablo Repetto'dan ilham aldım . Hatırlanması kolay bir çözümle geldim :

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

-z çoklu hat çıkışını önler

-e sonucu yankı

-r herhangi bir karakterin birden çok kez görünmesine izin verir

-n20 20 karakter uzunluğunda rasgele dize

{A..Z} {a..z} {0..9} char sınıflarına izin verildi

shuf linux coreutils'in bir parçasıdır ve yaygın olarak bulunur veya en azından port edilmiştir.


5

Diğerinden en fazla 100 bayt nasıl cevap @Brandin yorumunda açıkladı /dev/urandomkullanarak head -c 100. Bunu yapmanın başka bir yolu ile dd:

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

2>/dev/nullSonunda ddkomuta çıkışı "/ ... kayıtları dışarı ... kayıtları" bastırmaktır.

Bu iki yöntem arasındaki önemli avantajların / dezavantajların farkında değilim.

trGirdiden şikayetçi olmak için iki yöntemde de bir sorun vardı . Ben ikili girdi alınmasını hoşuna gitmediği için bu düşünce ve dolayısıyla birinci filtreleme önerdi /dev/randomile iconv -c -t US. Ancak, Gilles benim için işe yarayan farklı bir teşhis ve çözüm önerdi:

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

Nedense, iconvçözüm bir CPU çekirdeğini maksimuma çıkardı ve bir çıktı vermedi (öldürmeden önce 10 saniye bekledim) ...
landroni

Ubuntu 14.04 sistemimde iconv libc-bin2.19 tarafından sağlanıyor . Aynı iconv olup olmadığından emin değilim ...
landroni 13

trikili girişi destekler. Bununla birlikte, benzer bir aralık A-Zyerel ayarlardan etkilenebilir. DeneyinLC_ALL=C tr …
Gilles

1
@Gilles POSIX özelliğine göre "ikili girişi desteklemez". Sadece GNU tr, çoklu baytları desteklemediği için yapar (örneğin, son kontrol ettiğimde, her baytın altıncı bitini ayarlayarak değiştirildi. Diğer sistemler (örneğin, BSD) çok baytlıları desteklemektedir ve rastgele bir giriş akışının da geçerli bir çok baytlık akış olması çoğu kodlamada çok küçük olduğu için bu başarısız olur. GNU olabilir ki bu noktada bu başarısız olur, her an baytlı desteği eklemek. Tabii ki, ayar LC_ALL=Cbunu düzeltecektir.
Martin Tournoij

@Carpetsmoker POSIX, trikili girişi işlemden geçirmeyi gerektirir (C yerel ayarında). (Peki, tamam, yalnızca boş baytların destekleneceğini açıkça belirtir, boş olmayan dosyaların yeni satır karakteriyle bitmeyen, destekleneceğini söylemez, ancak pratikte de her zaman böyledir.)
Gilles,

4

APG bazı Linux dağıtımlarında varsayılan olarak bulunur.

Özel, Sayısal, Büyük ve Düşük alt gruplarında 5 ile 10 arasında parola oluşturmak için komut:

apg -MSNCL -m 5 -x 10

Ve döner

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

Yorumda @landroni tarafından söylendiği gibi.


1
İşte çok sayıda özel karakter içeren rastgele 14 harfli şifreler oluşturma seçenekleri:apg -a1 -m14
neuhaus

3

md5Tam olarak bu amacı olan araçlardan birini kullanabilirsiniz . Tamamen rastgele bir şifre oluşturma durumunda kullanabilirsiniz md5pass. Kullanımı çok basit ve çok faydalı bir araçtır, çünkü "normal metni", bir "tuz" ile birlikte kullanıp aynı şifrenin daha sonra kurtaracağınız şifreyi atlamak veya alternatif olarak tamamen almak isteyebilirsiniz her zaman rastgele şifre. Genel kullanım:

md5pass [password] [salt]

nerede passwordrastgele dize yapımı için kullanılacak ve seçilmiş bir kelimedir saltkullanılacak byte atlamak demek. Bunun gibi, böyle:

md5pass word

$1$.MUittVW$j.XDTF1QRnxqFdXRUiSLs0

Bu, kullanmanız için "rastgele bir sıra" şifresi oluşturacaktır. Hayır kullanırsanız salt, daha sonra bu aynı dizgiyi yeniden oluşturamayabilirsiniz.

Ancak böyle bir şey kullanırsanız salt:

md5pass word 512

$1$512$.0jcLPQ83jgszaPT8xzds0

daha sonra, eğer kelimeyi başlangıçta tanımlanmışsa aynı tuzla (veya atlayarak) birlikte kullanırsanız, kurtarabileceğiniz bir dizi oluşturabilirsiniz.


A saltkullanıldığında, bu PasswordMaker yaklaşımına benziyor ...
landroni

-Evet, bir üretici şifresine benzeyebilir, ancak fark, ticari bir program veya başka bir şey olmamasıdır, çünkü burada ele alınan md5 araçları seti, "md5pass, md5sum, md5sum.textutils" burada ele alınmıştır ve sistemde mevcuttur. hiçbir ücret ödemeden !!!
Joke Sr. Tamam

Aslında açık kaynak kodlu ve ticari olmayan PasswordMaker'ı da düşündüm .
landroni


2

Bu iki komut sırasıyla rasgele şifreler ve şifreler oluşturur.

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' ' '

Şifre üreticisi, şifrenin kullanmasını istediğiniz tüm karakterleri, satır başına bir karakter ve tam olarak birer kez içeren bir file_with_characters gerektirir. Dosya boş satırlar içermemeli ve satırlar yeni satır sonlandırılmalıdır.

Parola oluşturucu, parolanın kullanmasını istediğiniz tüm sözcükleri, satır başına bir kelime ve her biri tam olarak bir kez içeren bir file_with_words gerektirir. Dosya boş satırlar içermemeli ve satırlar yeni satır sonlandırılmalıdır.

--Head-count seçeneği, parolanın uzunluğunu - karakterlerde - veya parola - sözcüklerinde belirtir.


1

MakOS'ta tr tr / udrand boru tesisatının işe yaramadığını gördüm. İşte başka bir yol:

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

Cevabımın son örneğini kontrol edin. Tr kullanmaz. unix.stackexchange.com/a/494931/203075
Zibri

1

Kullanırım:

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

Bu bana 57 olası karakter verir. Dize, karakterleri ( ) ayırt etmek zor kopyalandığında yapıştırılabilir (kaldırılabilir +ve \) veya yazdırılabilir ve yeniden yazdırılabilir I1lO0.

  • 44 karakter bana verir: log 2 (57 44 )> 256.64 bit entropi
  • 22 karakter bana verir: log 2 (57 22 )> 128.32 entropi

Bunu sevdim çünkü:

  • komut yazmak için basit ve unutulmaz
  • standart sistem araçlarını kullanır - fazladan ikili dosya yok
  • fazla rastgelelik "israfı" yapmaz (doğrudan tr'e bağlanan çözümler için ~% 24 - aldığı rastgele bitlerin% 89'unu kullanır)
  • 22 ve 44 karakter, iki sınır değerin ortak gücünü oldukça iyi eşler
  • çıktı, minimum insan hata oranlarıyla kolayca seçilebilir ve yapıştırılabilir veya yazdırılabilir ve yeniden yazdırılabilir
  • md5sum / sha1sum, vb. gibi hex kodlu kodlardan (22 ve 44 yerine 32 ve 64) daha kısa çözümler

Kredi https://unix.stackexchange.com/a/230676/9583 ve benim ilk ilham özellikle yorumlar.


Eğer varsa ihtiyaç sayıları / özel karakterler - güvenle ekleyebilirsiniz değilse genellikle bir dizi olacak 1(bir numara w / tane almak için yeni bir oluşturulurken Entropiyi düşürmeden yapar Entropiyi azaltmak). !Entropiyi azaltmadan güvenle bir de ekleyebilirsiniz . Her iki şema da entropiyi arttırmaz, fakat oluşturulan dizgiyi daha eski parola gereksinimlerine uygun hale getirebilir.
Iiridayn

1

"Bir şeyi iyi yapan birçok küçük araç" un Unix felsefesi bu durumda size çok iyi hizmet ediyor.

  • /dev/urandom(yazdırılamaz karakterleri içeren) rastgele bir "bayt" akışıdır.
  • base64 Bayt verilerini kodlar [A-Za-z0-9/+] (tamamen yazdırılabilir)
  • dd argüman olarak verilen değiştiricileri uygulayarak girdiyi çıktıya kopyalar (blok boyutu ve blok sayısını içerebilir)

OSX

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

Linux

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

Notlar:

  • Bir karakter alt kümesine ihtiyacınız varsa, boruya bir değiştirici ekleyebilirsiniz.
    • Ör: tr -d '[A-Z/+]'büyük harflerden kurtulmak için +ve/
  • İhtiyacınız olan bsuzunlukta (blok ebadını) ayarlayabilirsiniz .
  • Linux'ta base64varsayılan olarak 76 sütuna kaydırılır ve -w0bunu istemediğiniz sürece sıfırlanması gerekir .

1

Her zamanki şifremi bir şifre oluşturmak için katkıda bulunmak istiyorum

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

Şifrenin uzunluğunu yapılandırmak için, cut komutundaki sayıyı istediğiniz uzunluğa, örneğin 24 karaktere değiştirin.

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

0 ya da O, 1 ya da l'yi karıştırmak istemiyor musunuz? Başka biriyle filtreleyintr

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

Kişisel olarak şifreyi asla özel bir karakterde seçmem, bu yüzden sadece [:alnum:]şifre oluşturucum için seçiyorum


0

secpwgenAlpine Linux’ta bakım yapıyorum ve kaynakları Github'ımda tutuyorum .

Rasgele dizeler üretebilir veya ifadeleri biter:

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 karakter rastgele bir dize oluşturmak için kullanacağınız:

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.

Kullanıcıların bir şifreyi hatırlamaları için diceware ifadelerini kullanın:

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

Ben şahsen:

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

0

Çok güvenli bir şifre yolum (pw uzunluğu 16'dır):

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

Örnek sonuç:

jT@s_Nx]gH<wL~W}

Veya alternatif olarak, birden çok şifre oluşturmak için:

cat / dev / urandom | tr -cd [: graph:] | fold -w 16 | head -6

Örnek sonuç:

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*

Biraz daha az güvenli (daha küçük karakter kümesi):

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

Örnek sonuç:

rJqYxYZLOTV+A45w
PUKQ+BoBf6yfZw5m
+LRfpsN9CsLRiN8V
yMS6zDpL6NHmG17s
yTUWPG7Rum97schi
cognvjVwaKaAyPRK

-1

Bunu başarmanın süper kolay ve basit (muhtemelen aradığınızdan daha basit) yolu, belirli bir aralıkta rastgele bir sayı oluşturmak, bu sayıyı eşdeğer ASCII karakterine dönüştürmek ve onu bir dizenin sonuna eklemek olacaktır. .

İşte Python'da temel bir örnek:

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

EDIT: yorum ekledi ve birden çok şifre oluşturmak ve bunları bir dosyaya yazmak için kod ekledi


3
Python'un gücü verilseydi, bu şekilde yapmazdım. Bir parola için geçerli tüm karakterleri içeren ve karakterleri seçmek için rasgele kullanma içeren bir dizgede birleşim kullanmak daha kolay olacaktır.
Mike McMahon


-2

Bu komutu istiyorum:

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

1
Daha fazla rasgele nanosaniye yaklaşımı kullanmayı tercih ederim: date +%N Bir komut dosyasında çok sayıda kullanıcı ve şifre oluşturursanız, saniyeler birçok hatta hatta tüm tarih komutları için aynı olabilir ve böylece aynı şifreler oluşturur.
John Mayor

1
@ JohnMayor: Bu yaklaşım daha sağlam dd if=/dev/random bs=512 count=1mı?
Eugen Konkov

8
Bu cevaplar çok tehlikelidir! Şifreleri, tahmin edilmesi kolay olan bilinen bir tohumdan üretirsiniz. Son yıllarda bu yöntemi kullanarak oluşturulan tüm şifreleri oluşturabilir ve bu listeyi kaba zorlama amaçları için kullanabilirim.
Akış

-4

Http://passwordsgenerator.net/ adresine gidip 2048 karaktere kadar rastgele karakter dizileri oluşturmaya, büyük harf, küçük harf, 0 - 9 rakamlar, noktalama işaretleri veya herhangi bir kombinasyon seçmeye izin verir.


2
Çevrimdışı üretilen dizgelerin tercih edilebilir olduğunu açıkça belirtmek için soruyu açıklığa kavuşturdum. Doğrudan bir web sitesinde bir şifre oluşturmak, özellikle bağlantı HTTPS değilse (cevabınızdaki gibi) güvenli değildir.
landroni

1
İnternetten rastgele bir şifre almak inanılmaz derecede aptalca ve naif. Artık birileri bazı servis veya site için kullandığınız bir şifreyi ve hakkınızdaki benzersiz kişisel bilgileri biliyor (IP adresi, tarayıcı / ortam bilgisi). Bu site şimdi sizin hakkınızda toplanan diğer verilerle çapraz referans verebilir. Örneğin, bir kez bir posta listesine gönderildiniz, IP adresiniz posta başlığında, bu yüzden şimdi bir şifreniz, adımız ve bir e-posta adresimiz var.
Martin Tournoij
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.