ลองสร้างรหัสผ่าน ผ่าน command line กัน

เวลาสมัครเว็บต่าง ๆ แล้วต้องตั้งรหัสผ่าน บางทีไม่รู้จะตั้งอะไร ก็จะ gen รหัสขึ้นมาแล้วก็ให้ browser จำให้

ส่วนใหญ่ก็จะหาเว็บ gen password ใช้ แต่ก็ไม่รู้ว่าจะปลอดภัยไหม… มา gen จากในคอมเลยละกัน

/dev/urandom เป็น pseudo random number generator ที่เอาค่ามาจาก noise ที่เก็บมาจาก environment

เราสามารถดึงมาได้ผ่านโปรแกรมอ่านไฟล์อะไรก็ได้

ซึ่งงงง dd เป็น โปรแกรมเอาไว้ copy file โดยที่สามารถกำหนดขนาด block ได้ ว่าจะ copy มากี่ bytes

dd if=/dev/urandom คือคำสั่ง copy file โดยที่ input file คือ /dev/urandom

dd if=/dev/urandom bs=32 count=1 คือคำสั่งให้ copy มา block ละ 32 bytes จำนวน 1 block

$ dd if=/dev/urandom bs=32 count=1
Z��r�Uk�a�V
�e��=h�A)�^1+0 records in
1+0 records out
32 bytes transferred in 0.000030 secs (1065220 bytes/sec)

พอรันแล้วจะเห็นว่าจะมี stderr ออกมาด้วย เราก็จะเอา stderr ออก โดยการส่งออกไปที่ /dev/null แทน

$ dd if=/dev/urandom bs=32 count=1 2> /dev/null
�=�]�JCI�,��p��@T�y�".g�@���Ӿ

แล้วก็เอาค่าที่ได้มา encode เป็น base64 จะได้อ่านรู้เรื่อง

$ dd if=/dev/urandom bs=32 count=1 2> /dev/null | base64
qWEG3HJo3+wxCg2wT5ZgR33K+LNj5Ar1o2yn913wRJo=

เพื่อให้เรียกใช้ง่าย ๆ จึงสร้าง alias ไว้ใน ~/.bash_profile

alias genpass="dd if=/dev/urandom count=1 bs=32 2> /dev/null | base64"

คราวนี้เราก็สามารถเรียกใช้ผ่าน command line ได้แล้ว เย่~

~$ genpass
fOMxSpvpToKksaIc2n5BtCUUC852kfDZ6jzCtztZrqY=
~$ genpass
mCq96dyX1f2xP8pBde2WV1uQ1j7KCG1BLIHNG6k8kno=
~$ genpass
TM/Gm8h5s67MbvW+bGnHpvfdAT00hTkbVWjH6hoz+3s=

ปอลิง. ถ้ารหัสผ่านสั้นไป ก็เปลี่ยน bs (blocksize) ให้มากกว่าเดิมได้


เพิ่มเติม มีคนถามว่า แล้วถ้าจะให้กำหนดขนาดได้เลยหล่ะ จะทำยังไง ?

ก็ทำเป็น shell script ไว้ แล้วเรียกเอาละกัน

#!/bin/bash
dd if=/dev/urandom bs=${1:-32} count=1 2> /dev/null | base64

ก็อปไปใส่ใน $PATH สักที่ เช่น /usr/local/bin/

เวลาจะใช้ก็เรียกได้เลยแบบง่าย ๆ

~$ genpass
NxoihhpoQ/aHN1xmp9wxHKYyIXKa8eI87SvNx7f06KY=
~$ genpass 16
yUwRru3rB+Q0Lt6q/2tDEg==
~$ genpass 64
Y1RTsb/+NlNEoNgc4sa2yHHhhNfk0YkKqugev3vVeUfiewPfvqvfnEew69cB/hPEy1miX3mbVn6sBw7eDtsW8A==
Like what you read? Give acoshift a round of applause.

From a quick cheer to a standing ovation, clap to show how much you enjoyed this story.