Linux 將系統帳號關於密碼的資訊儲存在檔案 /etc/shadow, 而密碼是經過加密。不論基於任何原因, 如果需要手動編輯 /etc/shadow 的密碼, 便需要產生一個與 /etc/shadow 使用相同加密方式的密碼。而且不用安裝其他工具, 用 Python 便可以產生這個加密密碼。
在 shadow 內的加密密碼, 以下列格式儲存:
$ID$SALT$ENCRYPTED
上面的 $ID 是加密方式, $SALT 是一個最多 16 位的隨機字串, $ENCRYPTED 則是 password hash.
其中 $ID 分別有以下幾種:
$1 -> MD5 (hash: 22 個字元長度)
$5 -> SHA-256 (hash: 43 個字元長度)
$6 -> SHA-512 (hash: 86 個字元長度)
使用以下指令可以產生適用於 /etc/shadow 的加密密碼, 而密碼下面用了 “MyPassword”:
MD5 Password Hash
1 2 |
python -c "import random,string,crypt; randomsalt = ''.join(random.sample(string.ascii_letters,8)); print crypt.crypt('MyPassword', '\$1\$%s\$' % randomsalt)" $1$WIBsJyQz$szJJcuax46nR41gz11rgZ0 |
SHA-256 Password Hash
1 2 |
python -c "import random,string,crypt; randomsalt = ''.join(random.sample(string.ascii_letters,8)); print crypt.crypt('MyPassword', '\$5\$%s\$' % randomsalt)" $5$xYzahrqd$q9ZVYDTARArhURV5mARQhmH72RR6r1wCV2XImJfJow8 |
SHA-512 Password Hash
1 2 |
python -c "import random,string,crypt; randomsalt = ''.join(random.sample(string.ascii_letters,8)); print crypt.crypt('MyPassword', '\$6\$%s\$' % randomsalt)" $6$lOWxhCFi$p/YJNYSB8PBirQyB/ktz9TCcSIMZHtqb2/4S6Oq5n3oUCXPng.titWpB639Zk28euQArnzuvRjQtoVLXyav5r0 |