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