zoukankan      html  css  js  c++  java
  • (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))'
  • 相关阅读:
    数据中台实战(六):交易分析
    数据中台实战(五):自助分析平台(产品设计篇)
    数据中台实战(四):商品分析(产品设计篇)
    数据中台实战(三):用户分析(产品设计篇)
    数据中台实战(二):基于阿里OneData的数据指标管理体系
    数据中台实战(一):以B2B电商亿订为例,谈谈产品经理视角下的数据埋点
    LeetCode82. 删除排序链表中的重复元素 II
    LeetCode203. 移除链表元素
    LeetCode445. 两数相加 II
    LeetCode2. 两数相加
  • 原文地址:https://www.cnblogs.com/wyzhou/p/9739004.html
Copyright © 2011-2022 走看看