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


该伪命令用于生成加密的密码。

[root@xuexi tmp]# whatis passwd
passwd () - update user's authentication tokens
passwd () - 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] [-] [-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  ; openssl passwd
R7J9OiPEN5xUw
C1lvfmeMltEWw

由上面的测试可知,使用默认的-crypt加密的密码是随机的。但是加入盐后,如果密码一样,盐一样,那么加密结果一样。

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

同时也看到了-crypt加密算法只取盐的前两位。

如果盐的前两位和密码任意一个不一样,加密结果都不一样。

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

注意,默认的-crypt只取盐的前两位字符,所以只要盐的前两位一样,即使第三位不同,结果也是一样的。

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

测试下MD5格式的加密算法。

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

可见,结果比-crypt的算法更长了,且不加盐时,密码生成是随机的。

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

可以看出,加了盐虽然复杂度增加了,但是也受到了"盐相同,密码相同,则加密结果相同"的限制。另外,盐的长度也不再限于2位了。

再为apache或nginx生成访问网页时身份验证的密码,即basic authentication验证方式的密码。

[root@xuexi ~]# openssl passwd -apr1   ; openssl passwd -apr1
$apr1$ydbBroeI$/9YsZR.tJI/GS0YswkQLJ.
$apr1$ncebpB6C$4fnRmlrnL2LPKxrZxCZzJ1
[root@xuexi ~]# openssl passwd -apr1 -salt 'abcdefg'  ;  openssl passwd -apr1 -salt 'abcdefg'
$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-
Password:
Retype password:
$$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

openssl passwd的更多相关文章

  1. 4.openssl passwd

    该伪命令用于生成加密的密码. [root@xuexi tmp]# whatis passwd ) - update user's authentication tokens ) - password ...

  2. (6) openssl passwd(生成加密的密码)

    该伪命令用于生成加密的密码 [root@docker121 ssl]# man -f passwd passwd (1) - update user's authentication tokens p ...

  3. OpenSSL命令---passwd

    NAME passwd - compute password hashes SYNOPSIS openssl passwd [-crypt] [-1] [-apr1] [-salt string] [ ...

  4. openssl用法详解

    OpenSSL 是一个开源项目,其组成主要包括一下三个组件: openssl:多用途的命令行工具 libcrypto:加密算法库 libssl:加密模块应用库,实现了ssl及tls openssl可以 ...

  5. /etc/passwd&/etc/shadow文件分析

    /etc/passwd该目录存储的是操作系统用户信息,该文件为所有用户可见.给linux系统添加一个帐号:useradd -g mysql -d /home/test -m test(:新建一个用户t ...

  6. openssl大纲

    1.加密和SSL机制:http://www.cnblogs.com/f-ck-need-u/p/6089523.html 2.openssl命令总指挥:http://www.cnblogs.com/f ...

  7. Linux的加密认证功能以及openssl详解

    一.详细介绍加密.解密技术 现在的加密/解密技术主要有三种:对称加密,非对称加密,和单向加密 这三种加密解密技术的组合就是现在电子商务的基础,它们三个有各自最适合的领域,而且所要完成的功能也是不同的, ...

  8. openssl命令用法

    openssl命令 配置文件:/etc/pki/tls/openssl.cnf 命令格式: openssl command [ command_opts ] [ command_args ] 众多子命 ...

  9. OpenSSL Command-Line HOWTO

    OpenSSL Command-Line HOWTO The openssl application that ships with the OpenSSL libraries can perform ...

随机推荐

  1. 20175316 盛茂淞 2018-2019-2 《Java程序设计》实验一 Java开发环境的熟悉 实验报告

    20175316 盛茂淞 2018-2019-2 <Java程序设计>实验一 Java开发环境的熟悉 实验报告 一.实验要求 1.使用JDK编译.运行简单的Java程序: 2.使用IDEA ...

  2. linux_文件夹实现挂载(必须在同一网段)

    将外部想要挂载传输的目录开启共享文件夹 首先进行安装 yum install nfs-utils rpcbind yum install nfs* 建立想要挂载的目录 查看可以执行挂载的目录有哪些 s ...

  3. C++ MFC棋牌类小游戏day6

    双人单机小游戏做完了,规则那部分还没介绍,暂时不打算介绍了,因为写的这个bug太多,我打算重新修改. 链接:https://pan.baidu.com/s/1XQKPSv0Tw36Qi2TeaRJiM ...

  4. Unity面试题2

    1.Animation.CrossFade命令作用是(C) A 动画消失 B动画转换 C东环的淡入为其他动画 2.Application.loadedLevel命令为(A) A加载关卡 B异步加载关卡 ...

  5. MyBatis 源码分析 - 缓存原理

    1.简介 在 Web 应用中,缓存是必不可少的组件.通常我们都会用 Redis 或 memcached 等缓存中间件,拦截大量奔向数据库的请求,减轻数据库压力.作为一个重要的组件,MyBatis 自然 ...

  6. Android开发 - 掌握ConstraintLayout(三)编辑器

    从本篇博客开始我们开始介绍如何使用ConstraintLayout. 既然ConstraintLayout叫约束布局,首先我们先介绍什么叫约束(Constraints): 约束(Constraints ...

  7. three.js 微信小游戏

    最近在 https://classroom.udacity.com/courses/cs291 学习了一些 3D 引擎和 three.js 的知识 把 three.js 弄到微信小游戏里,先随便跑一跑 ...

  8. 使用swoole进行消息推送通知,配合vb.net进行客户端开发一样爽[开发篇]

    在以前的项目中,就曾听说过swoole的大名,想用来进行消息推送,但是当时只是有了初步的了解,并不敢大胆的运用到线上产品.所谓 识不足则多虑,威不足则多怒.所以就是怕,只能跟领导说了运用极光的推送功能 ...

  9. python中的基本数值计算

    最近用到了python的数字信号处理,发现很多以前学的都忘掉了,这里做个笔记 # -*- coding: utf-8 -*- #计算乘方 print pow(3,4) #计算平方 import num ...

  10. python 离散序列 样本数伸缩(原创)

    解决问题: 有一个固定长度的1维矩阵,将这个矩阵的取样点进行扩充和减少 功能函数: def discrete_scale(data, num): import numpy as np import c ...