Tasodifiy parolni yaratish; Nima uchun bu portativ emas?

Tasodifiy parolni yaratishni xohlayman va shunga o'xshash ishlarni qilaman:

On my laptop, which runs Ubuntu, this produces only printable characters, as intended. But when I ssh into my school's server, which runs Red Hat Enterprise Linux, and run it there, I get outputs like 3!ri�b�GrӴ��1�H�<��oM����&�nMC[�Pb�|L%MP�����9��fL2q���IFmsd|l�K, which won't do at all. What might be going wrong here?

21

6 javoblar

Bu sizning mahalliy til va uz muammosi.

Hozirgi vaqtda GNU tr faqat bitta baytli belgilarni qo'llab-quvvatlaydi . Shunday qilib, mahalliy kodlardagi multibyte kodlashlarni ishlatish g'alati bo'lishi mumkin:

$ ��췔��ovȪ������^,

Shell ko'p baytli belgilarni to'g'ri yozib beradi, lekin GNU tr bosmadan chiqarilishi mumkin deb hisoblaydigan bytelarni olib tashlaydi.

Agar siz uni barqaror bo'lishini xohlasangiz, siz mahalliyni o'rnatishingiz kerak:

$ 
34
qo'shib qo'ydi
+1 chunki bu meni (Unix/Linux-da faqat 30 yil davomida ishlatadigan qobiqlardan foydalanishni) amalga oshirdi, shuning uchun stdin/stdout/stderr qayta yo'naltirishni so'ng .
qo'shib qo'ydi muallif Anthon, manba
@orion: shell harflarni to'g'ri yozadi. Bunday holda, bu muammo. U bosmadan chiqarilishi mumkin deb o'ylaydigan bytelarni olib tashladi, natija g'alati bo'ldi.
qo'shib qo'ydi muallif cuonglm, manba
Birgalikda tasodifiy bayt oqimlari, odatda, yaxshi tashkil etilgan UTF-8 belgilarining kodlashlari ning bir xil tasodifiy oqimi bo'lmaydi.
qo'shib qo'ydi muallif roger, manba
Faqat ba'zi bir g'aroyib joy o'rnatilgan bo'lsa, faqatgina sharh, qobiq hali ham ascii bo'lmasa ham, belgilarni to'g'ri chop qila olmasligi kerakmi? Eng kamida qobiliyatli qobiq (xtermdan tashqari)?
qo'shib qo'ydi muallif orion, manba
Bundan tashqari, parolingizda bo'shliqlar bo'lmasa, : grafik: o'rniga : graph: dan foydalaning:
qo'shib qo'ydi muallif edan, manba

Buning o'rniga o'ylab ko'ring

$ dd if=/dev/urandom bs=48 count=1 status=none | base64
imW/X60Sk9TQzl+mdS5PL7sfMy9k/qFBWWkzZjbYJttREsYpzIguWr/uRIhyisR7

Bu ikki afzalliklarga ega:

  • Tasodifiy qurilmadan faqat 48 bayt o'qiysiz, ~ 8KB emas; agar bir xil xostdagi boshqa jarayonlar tasodifiy sonlarga muhtoj bo'lsa, 8KB butunlay drenajlanishi jiddiy muammo bo'lishi mumkin.

  • base64 chiqishi deyarli hech qanday maxsus ma'noga ega bo'lmagan belgilarni o'z ichiga oladi. (Hechqisi yo'q, oxirida | tr +/-_ ) va (misolda bo'lgani kabi) base64 kirish , 3-sonli turkumdir.)

A password generated this way has exactly 384 bits of entropy, which is somewhat less than what you were doing (log2 9664 &approx; 421.4), but more than enough for most purposes (256 bits of entropy is safely in "still guessing when the Sun burns out" territory except for RSA keys, AFAIK).

11
qo'shib qo'ydi

Boshqa odamlar allaqachon mahalliy kod nimani anglatishini ko'rsatdi: <: code: [: print:] . Biroq, barcha bosib chiqariladigan belgilar parollar uchun mos emas (hatto ascii ham emas). Albatta, bo'shliqlar, tablar va # $% ^ ni xohlamaysizmi? parolingizda - eslashni qiyinlashtiradigan narsa emas, balki asosiy autentifikatsiya tizimi uchun xavfli bo'lishi mumkin, kirish maydoniga kiritish mumkin emas va hokazo. Bunday holatda, siz faqat "aqldan" belgi tanlashingiz kerak:

LC_ALL=C 

yoki oddiygina

Yoki yaxshi bo'lsa, boshqa javoblarda taklif qilinganidek base64 dan foydalaning.

3
qo'shib qo'ydi
Agar avtorizatsiya tizimi yoki kirish joylari muntazam ASCII belgilariga bo'ysunsa ... siz noto'g'ri narsa qilyapsiz va shaxsiy ma'lumotimga ishonishingiz kerak emas. Sizning parollaringizdagi barcha belgilar (bo'shliqlar) ni qabul qilishning mutlaqo sababi yo'q.
qo'shib qo'ydi muallif synergetic, manba
Siz aytganlaringiz juda noto'g'ri. foydalanuvchilarning majbur faqat ASCII harflar, raqamlar foydalanish va pastki chiziq hujum uchun parollarni buzish uchun ancha oson qilish, sezilarli alifbosi hajmini kamaytiradi uchun. hatto ? yoki ^ ishlayolmaydi autentifikatsiya tizimi jiddiy qabul qilinishi uchun, faqat juda yomon.
qo'shib qo'ydi muallif mrcharlie, manba
Ushbu parol hech qachon odamlar tomonidan kiritilmaydi (agar men uning o'rniga Diceware-dan foydalanishni istasam edi) va asosiy tizimda maxsus belgilarni muammosiz ishlashiga ishonchim komil. Baribir rahmat.
qo'shib qo'ydi muallif chips, manba
Faqatgina eslatma: C tilida [: print:] sinfida emas yorliqlari mavjud. Faqat [: alnum:] + [: punkt:] + bo'sh joy (bitta bo'sh joy emas, balki [: space:]) ).
qo'shib qo'ydi muallif jimmij, manba
Ko'rinishidan, bu erda emas, lekin insonning kirishiga kelsak, alifbo-raqamli parolni esdan chiqargandan ko'ra, egasiga o'zgacha ma'no beradigan ramzlarni qisqartirishdan ko'ra osonroqdir. Bu belgilarni har qanday klaviaturaga kiritish masalasi ham bor (har bir kishi birinchi darajali emas va ko'pchilik odamlar qaerda va qanday orqada ekanligini bilishmaydi), kirish qutilari deyarli yorliq paydo bo'lishi bilan ishlamaydi va veb-formatlarning ajablantiradigan soni hali ham tasdiqlash xatolar, sql inyeksiyasi yoki hatto noaniq holda katta sezuvchanlikga moyil.
qo'shib qo'ydi muallif orion, manba

Parolni yaratish uchun /dev/random dan foydalanganingizning sababi bormi, bilmayman, lekin sizni og'riqni engillashtiradigan pwgen dan foydalanishni tavsiya qilaman.

$ pwgen -s 10 1

Bu erda 10 parol uzunligi.

http://man.cx/pwgen

2
qo'shib qo'ydi

Nima haqida

tr -dc [:print:] < /dev/urandom | head -c 64 | strings

satrlar urandomning chiqishini chop etish formatida chop etishi kerak

2
qo'shib qo'ydi
Bunga -bash:/dev/urandom: ruxsat berish taqiqlandi
qo'shib qo'ydi muallif Anthon, manba
uzr so'rayman
qo'shib qo'ydi muallif Emilio M Bumachar, manba
#Chars allowed in password (I don't like l,o,O, etc):
P="0123456789ABCDEFGHIJKLMNPQRSTUVWXYZabcdefghijkmnpqrstuvwxyz"

#Or such:
#P="a-zA-Z0-9"

head -c 8 < /dev/urandom | tr '\000-\377' "$P$P$P$P$P"
echo

IMHO bu usul/dev/urandom-dan ma'lumotlarni iste'mol qilishda aqlli bo'ladi $ P $ P $ P ... deb yopilgan satr kamida 256 ta charm bo'lishi kerak.

1
qo'shib qo'ydi