openssl passwd

openssl系列文章:http://www.cnblogs.com/f-ck-need-u/p/7048359.htmlhtml


該僞命令用於生成加密的密碼。python

[root@xuexi tmp]# whatis 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。nginx

[root@xuexi tmp]# man sslpasswd

NAME
       passwd - compute password hashes

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

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

選項說明:apache

-crypt:UNIX標準加密算法,此爲默認算法。若是加鹽(-salt)算密碼,只取鹽的前2位,2位後面的全部字符都忽略。工具

-1(數字):基於MD5的算法代號。更多的算法代號見"http://www.cnblogs.com/f-ck-need-u/p/7011460.html#blog222"。測試

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

-salt:加密時加點鹽,能夠增長算法的複雜度。但加了鹽會有反作用:鹽相同,密碼相同,加密的結果將同樣。加密

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

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

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

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

[root@xuexi ~]# openssl passwd 123456 ; openssl passwd 123456 
R7J9OiPEN5xUw
C1lvfmeMltEWw

由上面的測試可知,使用默認的-crypt加密的密碼是隨機的。可是加入鹽後,若是密碼同樣,鹽同樣,那麼加密結果同樣。

[root@xuexi ~]# openssl passwd -salt 'xxx' 123456 ; openssl passwd -salt 'xxx' 123456
xxkVQ7YXT9yoE
xxkVQ7YXT9yoE

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

若是鹽的前兩位和密碼任意一個不同,加密結果都不同。

[root@xuexi ~]# openssl passwd -salt 'xyx' 123456;openssl passwd -salt 'xxx' 123456
xyJkVhXGAZ8tM
xxkVQ7YXT9yoE

注意,默認的-crypt只取鹽的前兩位字符,因此只要鹽的前兩位同樣,即便第三位不一樣,結果也是同樣的。

[root@xuexi ~]# openssl passwd -salt 'xyz' 123456 ; openssl passwd -salt 'xyy' 123456
xyJkVhXGAZ8tM
xyJkVhXGAZ8tM

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

[root@xuexi ~]# openssl passwd -1 123456 ; openssl passwd -1 123456     
$1$CJ1eA7bT$4VAJoS3hU/gRTrSQ8r8UQ.
$1$l1uIsNoH$A35cHQ6oGm29IJOas5v7w0

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

[root@xuexi ~]# openssl passwd -1 -salt 'abcdefg' 123456 ; openssl passwd -1 -salt 'abcdefg' 123456
$1$abcdefg$a3UbImglR4PCA3x7OvwMX.
$1$abcdefg$a3UbImglR4PCA3x7OvwMX.

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

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

[root@xuexi ~]# openssl passwd -apr1  123456 ; openssl passwd -apr1 123456
$apr1$ydbBroeI$/9YsZR.tJI/GS0YswkQLJ.
$apr1$ncebpB6C$4fnRmlrnL2LPKxrZxCZzJ1
[root@xuexi ~]# openssl passwd -apr1 -salt 'abcdefg' 123456 ;  openssl passwd -apr1 -salt 'abcdefg' 123456
$apr1$abcdefg$PCGBZd8XFTLOgZzLLU3K00
$apr1$abcdefg$PCGBZd8XFTLOgZzLLU3K00

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

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

[root@xuexi ~]# grub-crypt --sha-512
Password:
Retype password:
$6$2RCBJT7rELpfX4.Q$iKM5vNShNqUcCiez.JDBgbRkj007eXVVs790UwiOw1PMvB/s/vE7DhyDe8YJ6T8aEtP0Vev5kMReL/nILwLZX/

 可使用語句簡單地代替grub-crypt。

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

grub-crypt和上述python語句都是交互式的。若是要非交互式,稍稍修改下python語句:

python -c 'import crypt,getpass;pw="123456";print(crypt.crypt(pw))'
</div
相關文章
相關標籤/搜索