這裡介紹如何使用 Python 自己產生 Linux 中 /etc/shadow
所使用的加密格式密碼。
在 Linux 系統上,所有使用者的密碼都是以加密的形式存放在 /etc/shadow
檔案中,如果想要手動產生,可以使用以下所介紹的方法。
/etc/shadow
密碼格式在 /etc/shadow
中的密碼是用以下格式所儲存的:
$ID$SALT$ENCRYPTED
ID
代表加密演算法,可能的值如下:
1
:MD5(雜湊長度為 22 個字元)。5
:SHA-256(雜湊長度為 43 個字元)。6
:SHA-512(雜湊長度為 86 個字元)。SALT
是隨機字串(最長不超過 16 個字元),而 ENCRYPTED
則是密碼的雜湊值(hash)。
以下是產生 MD5 密碼雜湊的 Python 指令稿:
# 產生 MD5 密碼雜湊 import random import string import crypt # 密碼(明碼) myPassword = 'hello123' # 產生隨機的 slot randomSalt = ''.join(random.sample(string.ascii_letters,8)) # 產生 MD5 密碼雜湊 myHash = crypt.crypt(myPassword, '$1$%s$' % randomSalt) print(myHash)
$1$ympviwQO$ypOVhoNbR/5uXgtk9NZVA/
若要產生 SHA-256 的密碼雜湊,只要自己修改一下 ID
欄位的值即可,也就是將開頭的 $1
改為 $5
,其餘程式碼都相同:
# 產生 SHA-256 密碼雜湊 import random import string import crypt myPassword = 'hello123' randomSalt = ''.join(random.sample(string.ascii_letters,8)) # 產生 SHA-256 密碼雜湊 myHash = crypt.crypt(myPassword, '$5$%s$' % randomSalt) print(myHash)
$5$mHZziShP$ntL5UX68GG76VlcXMzmoerviugSaJF//j3WIDbsUOrA
產生 SHA-512 密碼雜湊的作法也是類似,將 $1
改為 $6
即可:
# 產生 SHA-512 密碼雜湊 import random import string import crypt myPassword = 'hello123' randomSalt = ''.join(random.sample(string.ascii_letters,8)) # 產生 SHA-512 密碼雜湊 myHash = crypt.crypt(myPassword, '$6$%s$' % randomSalt) print(myHash)
$6$OCymiXEe$L/Dmqi7aHl.7zdtm9E4OP.chumBGVCy9DcTJTJYk3RMT3/hbz9k/oxERQS/h3rlsWI6GdzsFR/x5XqftotFzI/
參考資料:Linux 技術手札