(6) openssl passwd(生成加密的密碼)


該偽命令用於生成加密的密碼

[root@docker121 ssl]# man -f passwd
passwd               (1)  - update user's authentication tokens
passwd               (5)  - password file
passwd [sslpasswd]   (1ssl)  - compute password hashes

直接man passwd會得到修改用戶密碼的passwd命令幫助,而不是openssl passwd的幫助,所以man sslpasswd。

[root@docker121 ssl]# man sslpasswd

NAME
       passwd - compute password hashes

SYNOPSIS
       openssl passwd [-crypt] [-1] [-apr1] [-salt string] [-in file] [-stdin] [-quiet] {password}

使用openssl passwd支持3種加密算法方式:不指定算法時,默認使用-crypt

選項說明:

-crypt:UNIX標准加密算法,此為默認算法。如果加鹽(-salt)算密碼,只取鹽的前2位,2位后面的所有字符都忽略

-1(數字):基於MD5的算法代號

-apr1(數字):apache中使用的備選md5算法代號,不能和"-1"選項一起使用,因為apr1本身就默認了md5。htpasswd工具生成的身份驗證密碼就是此方法。

-salt:加密時加點鹽,可以增加算法的復雜度。但加了鹽會有副作用:鹽相同,密碼也相同,則加密的結果將一樣

-in file:從文件中讀取要計算的密碼列表

-stdin:從標准輸入中獲取要輸入的密碼

-quiet:生成密碼過程中不輸出任何信息

在命令行中直接輸入要加密的密碼password或者使用-salt時,將不需要交互確認,否則會交互確認密碼。

[root@docker121 ssl]# openssl passwd 123456 ; openssl passwd 123456
cI9hPLPWdeMRg
OAgoiiA76fo4g
[root@docker121 ssl]# openssl passwd 123456 ; openssl passwd 123456
cttnI67rxMomg
7Irub1lTNn.5o

 

[root@docker121 ssl]# cat passwd.txt
123456
789012
[root@docker121 ssl]# openssl passwd -in passwd.txt
mju/5gHhG5b7w
r2q6WQyE5NXcw
[root@docker121 ssl]# openssl passwd -stdin
123456
jxtBZoaFt7Rg.
789012
sLeG431aG83Yk
^C

由上面的測試可知,使用默認的-crypt加密的密碼是隨機的。但是加入鹽后,如果密碼一樣,鹽一樣,那么加密結果一樣。

[root@docker121 ssl]# openssl passwd -salt 'xxx' 123456 ; openssl passwd -salt 'xxx' 123456
xxkVQ7YXT9yoE
xxkVQ7YXT9yoE
[root@docker121 ssl]# openssl passwd -salt 'xxx' 123456 ; openssl passwd -salt 'xxx' 123456
xxkVQ7YXT9yoE
xxkVQ7YXT9yoE

同時也看到了-crypt加密算法只取鹽的前兩位

如果鹽的前兩位和密碼任意一個不一樣,加密結果都不一樣。

[root@docker121 ssl]# openssl passwd -salt 'xyz' 123456 ; openssl passwd -salt 'iyz' 123456
xyJkVhXGAZ8tM
iy/aU7U8gjKhM
[root@docker121 ssl]# openssl passwd -salt 'xyz' 123456 ; openssl passwd -salt 'iyz' 123456
xyJkVhXGAZ8tM
iy/aU7U8gjKhM

注意,默認的-crypt只取鹽的前兩位字符,所以只要鹽的前兩位一樣,即使后面的不同,結果也是一樣的

[root@docker121 ssl]# openssl passwd -salt 'xyz' 123456 ; openssl passwd -salt 'xyi' 123456
xyJkVhXGAZ8tM
xyJkVhXGAZ8tM
[root@docker121 ssl]# openssl passwd -salt 'xyz' 123456 ; openssl passwd -salt 'xyi' 123456
xyJkVhXGAZ8tM
xyJkVhXGAZ8tM

測試下MD5格式的加密算法。

[root@docker121 ssl]# openssl passwd -1 123456;openssl passwd -1 123456
$1$qwG6UAbF$HUwE3itbolpNzpOqE4UZZ1
$1$gcypn016$ciVqzZaOy8LOv4Al3xrvh0
[root@docker121 ssl]# openssl passwd -1 123456;openssl passwd -1 123456
$1$xRqTfPTS$Q2JA/tpMDtYQEzEX9Yfew1
$1$fdiTu6j2$Z2xc5QC7EuDFAzVHPsa.y1

可見,結果比-crypt的算法更長了,且不加鹽時,密碼生成是隨機的。

[root@docker121 ssl]# openssl passwd -salt '123456' -1 123456;openssl passwd -salt '123456' -1 123456
$1$123456$wOSEtcyiP2N/IfIl15W6Z0
$1$123456$wOSEtcyiP2N/IfIl15W6Z0
[root@docker121 ssl]# openssl passwd -salt '123456' -1 123456;openssl passwd -salt '123456' -1 123456
$1$123456$wOSEtcyiP2N/IfIl15W6Z0
$1$123456$wOSEtcyiP2N/IfIl15W6Z0

 

[root@docker121 ssl]# openssl passwd -salt '123456' -1 123456;openssl passwd -salt '1209876' -1 123456

$1$123456$wOSEtcyiP2N/IfIl15W6Z0
$1$1209876$GJmkZ/OwcEoeZR89FzlEv1
[root@docker121 ssl]# openssl passwd -salt '123456' -1 123456;openssl passwd -salt '1209876' -1 123456
$1$123456$wOSEtcyiP2N/IfIl15W6Z0
$1$1209876$GJmkZ/OwcEoeZR89FzlEv1

可以看出,加了鹽雖然復雜度增加了,但是也受到了"鹽相同,密碼也相同,則加密結果相同"的限制。另外,鹽的長度也不再限於2位了

 

為apache或nginx生成訪問網頁時身份驗證的密碼,即basic authentication驗證方式的密碼

[root@docker121 ssl]# openssl passwd -apr1 123456 ; openssl passwd -apr1 123456
$apr1$2ZEGpQsF$H7SuFQ4oJWVwYs5LvLIcU.
$apr1$9d9t1fgp$zbeIA4UVr/EhSChtwsL6h0
[root@docker121 ssl]# openssl passwd -apr1 123456 ; openssl passwd -apr1 123456
$apr1$bcZWZQUI$cgdNODstfq42jDinEj7dC.
$apr1$gk2wGWj8$cL1IPa7zPZmo1XGimILul/
[root@docker121 ssl]# openssl passwd -salt '123456' -apr1 123456 ; openssl passwd -salt '123456' -apr1 123456
$apr1$123456$xBTbgHoSq0NxRYGC1cF.3/
$apr1$123456$xBTbgHoSq0NxRYGC1cF.3/
[root@docker121 ssl]# openssl passwd -salt '123456' -apr1 123456 ; openssl passwd -salt '123456' -apr1 123456
$apr1$123456$xBTbgHoSq0NxRYGC1cF.3/
$apr1$123456$xBTbgHoSq0NxRYGC1cF.3/
[root@docker121 ssl]# openssl passwd -salt '123456' -apr1 123456 ; openssl passwd -salt '1234567' -apr1 123456
$apr1$123456$xBTbgHoSq0NxRYGC1cF.3/
$apr1$1234567$puqjuzZs3GaBxhhbHpKW3.
[root@docker121 ssl]# openssl passwd -salt '123456' -apr1 123456 ; openssl passwd -salt '1234567' -apr1 123456
$apr1$123456$xBTbgHoSq0NxRYGC1cF.3/
$apr1$1234567$puqjuzZs3GaBxhhbHpKW3.

 

同樣,加了鹽就受到"鹽相同,密碼也相同,則加密結果相同"的限制

關於openssl passwd文件,它生成的密碼可以直接復制到/etc/shadow文件中,但openssl passwd因為不支持sha512,所以密碼強度不夠。如果要生成sha512的密碼,可以使用grub-crypt生成,它是一個python腳本,只不過很不幸CentOS 7只有grub2,grub-crypt命令已經沒有了。

[root@docker122 ssl] grub-crypt --sha-512
Password:
Retype password:
$6$6LkICyGaDXQE/zu8$skC4qgnVLRAy6N1eEU0OrfVvRRaAkEQv/5Jz5znO5WLmMa.QBW2zS76TBcEa1boP4otQsMEm.XScx0316n11Q/

 centos 7.x上可以使用python語句簡單地代替grub-crypt,下面的python語句都是交互式的。

python -c 'import crypt,getpass;pw=getpass.getpass();print(crypt.crypt(pw) if (pw==getpass.getpass("Confirm: ")) else exit())'

如果要非交互式,使用下面python語句:

python -c 'import crypt,getpass;pw="123456";print(crypt.crypt(pw))'


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM