Seperti yang Anda ketahui, peretas ada di mana-mana dan mereka ingin meretas segalanya. Anda diminta membuat persyaratan kata sandi yang akan menghentikan peretas apa pun . Masalahnya adalah, bos Anda telah mendengar bahwa membayar untuk LOC itu jahat dan dia membayar Anda $ 1800 - $ 0,03 * karakter yang dimasukkan per bulan untuk membuat Anda menulis hal paling sederhana yang mungkin bisa berhasil. Jadi, Anda harus menggunakan sejumlah kecil karakter (semoga sangat kecil), atau melupakan uang tunai. Juga, bos Anda tidak peduli bahasa apa yang akan Anda gunakan.
Persyaratan untuk kata sandi yang baik mirip dengan yang ada di artikel yang disebutkan, kecuali persyaratan berbasis kamus dihapus untuk menghindari membuat solusi bergantung pada file eksternal, Anda tidak perlu memeriksa untuk mengatur ulang huruf (Sulit untuk memahami apa artinya sebenarnya), aturan terakhir dihapus (Apa 3/4?) dan tidak memeriksa kata sandi lama.
Persyaratan yang tepat setelah menghapus persyaratan tertentu dari artikel tertaut adalah:
- memiliki setidaknya 8 karakter!
- tidak lebih dari 12 karakter!
- memiliki karakter huruf besar dan kecil!
- tidak boleh lebih dari 8 huruf besar!
- tidak lebih dari 8 huruf kecil!
- punya minimal 2 huruf!
- punya surat terkemuka!
- memiliki setidaknya 1 digit!
- bukan nama pengguna Anda!
- bukan nama pengguna Anda mundur!
- tidak mengandung nama pengguna Anda!
- tidak mengandung nama pengguna Anda mundur!
- tidak lebih dari 1 pasang karakter berulang!
- tidak memiliki 3 kejadian dengan karakter yang sama!
- tidak mengandung karat (^)
- tidak mengandung ruang
- tidak mengandung =
- tidak conatain &
- tidak mengandung #
- tidak mengandung,
- bukan conatain ;
- tidak mengandung "
- tidak mengandung>
- tidak mengandung <
- tidak mengandung [
- tidak mengandung |
- tidak mengandung)
Semua salah eja dalam daftar ini dibiarkan apa adanya.
$ ./checkpass
Username: John
Password: L!]E2m69
OK.
$ ./checkpass
Username: John
Password: JohnnhoJ12
Nope.
$ ./checkpass
Username: JOE.smith
Password: JOE!smith123
OK.
Kode terpendek memenangkan uang (dikirim sebagai file JPG). Itu harus menunjukkan "Nama pengguna:" dan "Kata sandi:" meminta dan membalas dengan pesan yang tepat.
1
(digit satu) bukan ell.Jawaban:
Perl,
203194189193 charsInilah Perl saya yang menangani masalahnya:
Regex memeriksa, agar, bahwa kata sandi:
dimulai dengan huruf, memiliki delapan hingga dua belas karakter
berisi angka
berisi huruf besar
memiliki delapan atau lebih sedikit huruf besar
memiliki delapan atau lebih sedikit huruf kecil
berisi huruf kecil
tidak mengandung tanda baca terlarang, tiga kemunculan karakter apa pun, lebih dari satu kemunculan karakter berlipat ganda, nama pengguna, atau nama pengguna terbalik.
(Terima kasih kepada Peter Taylor karena menunjukkan bug dalam versi 189-char.)
sumber
use v5.10;
dan gagal "saya regex lolos dengan benar" kasus uji. Lihat ideone.com/QKFnZ\Q$u\E|\Q$n
(yang terakhir\E
dapat dilewati, jika bagian ini akan dipindahkan ke akhir).(.)(.*\1.*\1|\1.*(.)\3)
(tidak diuji - Saya tidak akan mencoba membuat skrip baterai uji penuh dengan ideone).Ruby, 270 karakter
Implementasi ruby dibangun di atas dua belas ekspresi reguler. Setiap ungkapan adalah kecocokan positif (lima pertama) atau negatif (tujuh terakhir). Sebagai batasan, nama pengguna hanya boleh berisi huruf atau angka.
Pencocokan ekspresi reguler positif:
/^.{8,12}$/
: memiliki setidaknya 8 karakter !, tidak boleh lebih dari 12 karakter!/\p{Lower}/
dan/\p{Upper}/
: memiliki karakter huruf besar dan kecil!/^(\p{Alpha}.*){2}/
: punya minimal 2 huruf !, punya surat terkemuka!/\d/
: miliki setidaknya 1 digit!Pencocokan ekspresi reguler negatif:
/(\p{Lower}.*){9}/
: memiliki tidak lebih dari 8 huruf kecil!/(\p{Upper}.*){9}/
: tidak lebih dari 8 huruf besar!/(.)\1.*(.)\2/
: tidak lebih dari 1 pasang karakter berulang!/(.).*\1.*\1/
: tidak memiliki 3 kejadian dengan karakter yang sama!/[ ^=&#,;"<>\[|)]/
: tidak mengandung tanda sisipan, spasi, =, &, #, ,,;, ",>, <, [, |,)/#{u}/
: bukan nama pengguna Anda!, tidak mengandung nama pengguna Anda!/#{u.reverse}/
: bukan nama pengguna Anda mundur !, tidak mengandung nama pengguna Anda mundur!sumber
Python 3, 291 byte / karakter
Lebih baik diformat dan dikomentari:
Anda dapat menemukan solusi ini di ideone.com , tetapi hasilnya terlihat agak jelek karena tidak menunjukkan input yang telah ditentukan atau bahkan jeda baris di sana. Juga, kombinasi nama pengguna-kata sandi
"JOE.smith"
-"JOE!smith123"
saat ini dimasukkan sebagai data input tetap.Saya menambahkan rincian semua cek sebagai hasil debug.
sumber