openssl passwd


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


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

[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。

[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。

選項說明:

-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工具生成的身份驗證密碼就是此方法。

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

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

-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


免責聲明!

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



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