0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

学习使用 8 种 Linux 原生命令或第三方实用程序来生成随机密码

Linux爱好者 2018-02-08 08:26 次阅读

学习使用 8 种 Linux 原生命令或第三方实用程序来生成随机密码。

在这篇文章中,我们将引导你通过几种不同的方式在 Linux 终端中生成随机密码。其中几种利用原生 Linux 命令,另外几种则利用极易在 Linux 机器上安装的第三方工具或实用程序实现。在这里我们利用像openssl,dd,md5sum,tr,urandom这样的原生命令和 mkpasswd,randpw,pwgen,spw,gpg,xkcdpass,diceware,revelation,keepaasx,passwordmaker 这样的第三方工具。

其实这些方法就是生成一些能被用作密码的随机字母字符串。随机密码可以用于新用户的密码,不管用户基数有多大,这些密码都是独一无二的。话不多说,让我们来看看 8 种不同的在 Linux 上生成随机密码的方法吧。

使用 mkpasswd 实用程序生成密码

mkpasswd在基于 RHEL 的系统上随expect软件包一起安装。在基于 Debian 的系统上mkpasswd则在软件包whois中。直接安装mkpasswd软件包将会导致错误:

RHEL 系统:软件包 mkpasswd 不可用。

Debian 系统:错误:无法定位软件包 mkpasswd。

所以按照上面所述安装他们的父软件包,就没问题了。

运行mkpasswd来获得密码

root@kerneltalks# mkpasswd << on RHEL

zt*hGW65c

root@kerneltalks# mkpasswd teststring << on Ubuntu

XnlrKxYOJ3vik

这个命令在不同的系统上表现得不一样,所以工作方式各异。你也可以通过参数来控制长度等选项,可以查阅 man 手册来探索。

使用 openssl 生成密码

几乎所有 Linux 发行版都包含 openssl。我们可以利用它的随机功能来生成可以用作密码的随机字母字符串。

root@kerneltalks# openssl rand -base64 10

nU9LlHO5nsuUvw==

这里我们使用 base64 编码随机函数,最后一个数字参数表示长度。

使用 urandom 生成密码

设备文件 /dev/urandom 是另一个获得随机字符串的方法。我们使用 tr 功能并裁剪输出来获得随机字符串,并把它作为密码。

root@kerneltalks# strings /dev/urandom |tr -dc A-Za-z0-9 | head -c20; echo

UiXtr0NAOSIkqtjK4c0X

使用 dd 命令生成密码

我们甚至可以使用 /dev/urandom 设备配合 dd 命令 来获取随机字符串。

root@kerneltalks# dd if=/dev/urandom bs=1 count=15|base64 -w 0

15+0records in

15+0records out

15bytes(15B)copied,5.5484e-05s,270kB/s

QMsbe2XbrqAc2NmXp8D0

我们需要将结果通过 base64 编码使它能被人类可读。你可以使用数值来获取想要的长度。想要获得更简洁的输出的话,可以将“标准错误输出”重定向到 /dev/null。简洁输出的命令是:

root@kerneltalks# dd if=/dev/urandom bs=1 count=15 2>/dev/null|base64 -w 0

F8c3a4joS+a3BdPN9C++

使用 md5sum 生成密码

另一种获取可用作密码的随机字符串的方法是计算 MD5 校验值!校验值看起来确实像是随机字符串组合在一起,我们可以用作密码。确保你的计算源是个变量,这样的话每次运行命令时生成的校验值都不一样。比如 date !date 命令 总会生成不同的输出。

root@kerneltalks# date |md5sum

4d8ce5c42073c7e9ca4aeffd3d157102-

在这里我们将 date 命令的输出通过 md5sum 得到了校验和!你也可以用 cut 命令 裁剪你需要的长度。

使用 pwgen 生成密码

pwgen 软件包在类似 EPEL 软件仓库(LCTT 译注:企业版 Linux 附加软件包)中。pwgen 更专注于生成可发音的密码,但它们不在英语词典中,也不是纯英文的。标准发行版仓库中可能并不包含这个工具。安装这个软件包然后运行 pwgen 命令行。Boom !

root@kerneltalks# pwgen

thu8Iox7 ahDeeQu8 Eexoh0ai oD8oozie ooPaeD9t meeNeiW2 Eip6ieph Ooh1tiet

cootad7O Gohci0vo wah9Thoh Ohh3Ziur Ao1thoma ojoo6aeW Oochai4v ialaiLo5

aic2OaDa iexieQu8 Aesoh4Ie Eixou9ph ShiKoh0i uThohth7 taaN3fuu Iege0aeZ

cah3zaiW Eephei0m AhTh8guo xah1Shoo uh8Iengo aifeev4E zoo4ohHa fieDei6c

aorieP7k ahna9AKe uveeX7Hi Ohji5pho AigheV7u Akee9fae aeWeiW4a tiex8Oht

你的终端会呈现出一个密码列表!你还想要什么呢?好吧。你还想再仔细探索的话, pwgen 还有很多自定义选项,这些都可以在 man 手册里查阅到。

使用 gpg 工具生成密码

GPG 是一个遵循 OpenPGP 标准的加密及签名工具。大部分 gpg 工具都预先被安装好了(至少在我的 RHEL7 上是这样)。但如果没有的话你可以寻找 gpg 或 gpg2 软件包并安装它。

使用下面的命令以从 gpg 工具生成密码。

root@kerneltalks# gpg --gen-random --armor 1 12

mL8i+PKZ3IuN6a7a

这里我们传了生成随机字节序列选项(--gen-random),质量为 1(第一个参数),次数 12 (第二个参数)。选项--armor保证以base64编码输出。

使用 xkcdpass 生成密码

著名的极客幽默网站xkcd,发表了一篇非常有趣的文章,是关于好记但又复杂的密码的。所以xkcdpass工具就受这篇文章启发,做了这样的工作!这是一个 Python 软件包,可以在Python 的官网上找到它。

学习使用 8 种 Linux 原生命令或第三方实用程序来生成随机密码

这里是安装步骤和我的测试 RHEL 服务器的输出,以供参考。

root@kerneltalks# wget https://pypi.python.org/packages/b4/d7/3253bd2964390e034cf0bba227db96d94de361454530dc056d8c1c096abc/xkcdpass-1.14.3.tar.gz#md5=5f15d52f1d36207b07391f7a25c7965f

--2018-01-2319:09:17--https://pypi.python.org/packages/b4/d7/3253bd2964390e034cf0bba227db96d94de361454530dc056d8c1c096abc/xkcdpass-1.14.3.tar.gz

Resolving pypi.python.org(pypi.python.org)...151.101.32.223,2a04:4e42:8::223

Connecting topypi.python.org(pypi.python.org)|151.101.32.223|:443...connected.

HTTP request sent,awaiting response...200OK

Length: 871848(851K)[binary/octet-stream]

Saving to: ‘xkcdpass-1.14.3.tar.gz’

100%[==============================================================================================================================>]871,848 --.-K/s in0.01s

2018-01-2319:09:17(63.9MB/s) - ‘xkcdpass-1.14.3.tar.gz’saved[871848/871848]

root@kerneltalks# tar -xvf xkcdpass-1.14.3.tar.gz

xkcdpass-1.14.3/

xkcdpass-1.14.3/examples/

xkcdpass-1.14.3/examples/example_import.py

xkcdpass-1.14.3/examples/example_json.py

xkcdpass-1.14.3/examples/example_postprocess.py

xkcdpass-1.14.3/LICENSE.BSD

xkcdpass-1.14.3/MANIFEST.in

xkcdpass-1.14.3/PKG-INFO

xkcdpass-1.14.3/README.rst

xkcdpass-1.14.3/setup.cfg

xkcdpass-1.14.3/setup.py

xkcdpass-1.14.3/tests/

xkcdpass-1.14.3/tests/test_list.txt

xkcdpass-1.14.3/tests/test_xkcdpass.py

xkcdpass-1.14.3/tests/__init__.py

xkcdpass-1.14.3/xkcdpass/

xkcdpass-1.14.3/xkcdpass/static/

xkcdpass-1.14.3/xkcdpass/static/eff-long

xkcdpass-1.14.3/xkcdpass/static/eff-short

xkcdpass-1.14.3/xkcdpass/static/eff-special

xkcdpass-1.14.3/xkcdpass/static/fin-kotus

xkcdpass-1.14.3/xkcdpass/static/ita-wiki

xkcdpass-1.14.3/xkcdpass/static/legacy

xkcdpass-1.14.3/xkcdpass/static/spa-mich

xkcdpass-1.14.3/xkcdpass/xkcd_password.py

xkcdpass-1.14.3/xkcdpass/__init__.py

xkcdpass-1.14.3/xkcdpass.1

xkcdpass-1.14.3/xkcdpass.egg-info/

xkcdpass-1.14.3/xkcdpass.egg-info/dependency_links.txt

xkcdpass-1.14.3/xkcdpass.egg-info/entry_points.txt

xkcdpass-1.14.3/xkcdpass.egg-info/not-zip-safe

xkcdpass-1.14.3/xkcdpass.egg-info/PKG-INFO

xkcdpass-1.14.3/xkcdpass.egg-info/SOURCES.txt

xkcdpass-1.14.3/xkcdpass.egg-info/top_level.txt

root@kerneltalks# cd xkcdpass-1.14.3

root@kerneltalks# python setup.py install

running install

running bdist_egg

running egg_info

writing xkcdpass.egg-info/PKG-INFO

writing top-level names toxkcdpass.egg-info/top_level.txt

writing dependency_links toxkcdpass.egg-info/dependency_links.txt

writing entry points toxkcdpass.egg-info/entry_points.txt

reading manifest file'xkcdpass.egg-info/SOURCES.txt'

reading manifest template'MANIFEST.in'

writing manifest file'xkcdpass.egg-info/SOURCES.txt'

installing library code tobuild/bdist.linux-x86_64/egg

running install_lib

running build_py

creating build

creating build/lib

creating build/lib/xkcdpass

copying xkcdpass/xkcd_password.py -> build/lib/xkcdpass

copying xkcdpass/__init__.py -> build/lib/xkcdpass

creating build/lib/xkcdpass/static

copying xkcdpass/static/eff-long -> build/lib/xkcdpass/static

copying xkcdpass/static/eff-short -> build/lib/xkcdpass/static

copying xkcdpass/static/eff-special -> build/lib/xkcdpass/static

copying xkcdpass/static/fin-kotus -> build/lib/xkcdpass/static

copying xkcdpass/static/ita-wiki -> build/lib/xkcdpass/static

copying xkcdpass/static/legacy -> build/lib/xkcdpass/static

copying xkcdpass/static/spa-mich -> build/lib/xkcdpass/static

creating build/bdist.linux-x86_64

creating build/bdist.linux-x86_64/egg

creating build/bdist.linux-x86_64/egg/xkcdpass

copying build/lib/xkcdpass/xkcd_password.py -> build/bdist.linux-x86_64/egg/xkcdpass

copying build/lib/xkcdpass/__init__.py -> build/bdist.linux-x86_64/egg/xkcdpass

creating build/bdist.linux-x86_64/egg/xkcdpass/static

copying build/lib/xkcdpass/static/eff-long -> build/bdist.linux-x86_64/egg/xkcdpass/static

copying build/lib/xkcdpass/static/eff-short -> build/bdist.linux-x86_64/egg/xkcdpass/static

copying build/lib/xkcdpass/static/eff-special -> build/bdist.linux-x86_64/egg/xkcdpass/static

copying build/lib/xkcdpass/static/fin-kotus -> build/bdist.linux-x86_64/egg/xkcdpass/static

copying build/lib/xkcdpass/static/ita-wiki -> build/bdist.linux-x86_64/egg/xkcdpass/static

copying build/lib/xkcdpass/static/legacy -> build/bdist.linux-x86_64/egg/xkcdpass/static

copying build/lib/xkcdpass/static/spa-mich -> build/bdist.linux-x86_64/egg/xkcdpass/static

byte-compiling build/bdist.linux-x86_64/egg/xkcdpass/xkcd_password.py toxkcd_password.pyc

byte-compiling build/bdist.linux-x86_64/egg/xkcdpass/__init__.py to__init__.pyc

creating build/bdist.linux-x86_64/egg/EGG-INFO

copying xkcdpass.egg-info/PKG-INFO -> build/bdist.linux-x86_64/egg/EGG-INFO

copying xkcdpass.egg-info/SOURCES.txt -> build/bdist.linux-x86_64/egg/EGG-INFO

copying xkcdpass.egg-info/dependency_links.txt -> build/bdist.linux-x86_64/egg/EGG-INFO

copying xkcdpass.egg-info/entry_points.txt -> build/bdist.linux-x86_64/egg/EGG-INFO

copying xkcdpass.egg-info/not-zip-safe -> build/bdist.linux-x86_64/egg/EGG-INFO

copying xkcdpass.egg-info/top_level.txt -> build/bdist.linux-x86_64/egg/EGG-INFO

creating dist

creating'dist/xkcdpass-1.14.3-py2.7.egg'andadding'build/bdist.linux-x86_64/egg'toit

removing'build/bdist.linux-x86_64/egg'(andeverything under it)

Processing xkcdpass-1.14.3-py2.7.egg

creating /usr/lib/python2.7/site-packages/xkcdpass-1.14.3-py2.7.egg

Extracting xkcdpass-1.14.3-py2.7.eggto /usr/lib/python2.7/site-packages

Adding xkcdpass1.14.3toeasy-install.pth file

Installing xkcdpass script to /usr/bin

Installed /usr/lib/python2.7/site-packages/xkcdpass-1.14.3-py2.7.egg

Processing dependencies forxkcdpass==1.14.3

Finished processing dependencies forxkcdpass==1.14.3

现在运行 xkcdpass 命令,将会随机给出你几个像下面这样的字典单词:

root@kerneltalks# xkcdpass

broadside unpadded osmosis statistic cosmetics lugged

你可以用这些单词作为其他命令,比如 md5sum 的输入,来获取随机密码(就像下面这样),甚至你也可以用每个单词的第 N 个字母来生成你的密码!

root@kerneltalks# xkcdpass |md5sum

45f2ec9b3ca980c7afbd100268c74819-

root@kerneltalks# xkcdpass |md5sum

ad79546e8350744845c001d8836f2ff2-

或者你甚至可以把所有单词串在一起作为一个超长的密码,不仅非常好记,也不容易被电脑程序攻破。

Linux 上还有像 Diceware、 KeePassX、 Revelation、 PasswordMaker 这样的工具,也可以考虑用来生成强随机密码。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux
    +关注

    关注

    87

    文章

    10990

    浏览量

    206733
  • 密码
    +关注

    关注

    8

    文章

    185

    浏览量

    30261
  • OpenSSL
    +关注

    关注

    0

    文章

    20

    浏览量

    8587

原文标题:八种在 Linux 上生成随机密码的方法

文章出处:【微信号:LinuxHub,微信公众号:Linux爱好者】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    Labview如何内嵌操作第三方EXE程序

    自己在网上搜了下相关资料,能把第三方EXE内嵌进入容器里,但是有个问题,这个第三方软件必须手动拖到容器正中间,手动最大化。请问有什么方法可以自动实现吗? 下图是我内嵌的POLL 软件。如图!
    发表于 04-18 14:26

    如何把第三方库加到PROTEUS中?

    新手求教,弱弱的问下,下了一个第三方库,说是要先安装,再添加路径,可是我下来的第三方库没有看到安装文件啊。还望指教如何添加!
    发表于 06-15 22:32

    allegro第三方生成网表如何实现与allegro pcb交互设计

    allegro第三方生成网表如何实现与allegro pcb交互设计
    发表于 10-28 10:37

    关于通过第三方软件生成LabVIEW安装程序的问题

    我想通过第三方软件生成LabVIEW安装程序,那么我该从哪里找到NI的附加安装程序呢?求大神解答啊!困扰我好久了,不知道该找哪些。。
    发表于 09-30 16:09

    Linux生成密码命令有哪些?

    随机密码,除此之外还可以使用第三方工具进行生成,如mkpasswd、randpw、pwgen、spw,gpg、xkcdpass等,有兴趣的可以了解一下!
    发表于 03-02 18:53

    第三方dll调用问题!!!

    第三方dll,没有.h,labview怎么实现调用,dll可以用VS打开,类库说明也有
    发表于 05-11 09:14

    Linux生成随机密码的方法

    随机密码,除此之外还可以使用第三方工具进行生成,如mkpasswd、randpw、pwgen、spw,gpg、xkcdpass等,有兴趣的可以了解一下!
    发表于 11-20 11:02

    国内知名第三方检测认证机构排名

    的检测机构介入,成熟的第三方检测机构介入商品检测在十九世纪中叶已经很普遍了,并成为一自觉的商业行为。目前中国已经成为了全球贸易大国,经济实力跃居世界第二,强劲的对外贸易增长态势促进了检测行业的不断
    发表于 07-19 16:57

    关于LabVIEW调用第三方exe,如何去控制第三方exe按钮的问题

    我想调用第三方的exe,但并没有给出任何接口,就单单一个exe程序,通过查资料得出可以用window自带的user32.dll可以控制第三方的软件,通过FindWindowA函数找到该软件句柄,通过
    发表于 08-12 16:37

    请教LABVIEW怎么读取第三方测量仪器电脑软件测量结果数据

    直接从第三方软件窗口显示画面把数据抓取出来生成报告,然后传入MES系统,请各位师傅提供一下方案与经验 非常感谢
    发表于 12-13 21:07

    请教LABVIEW怎么读取第三方测量仪器电脑软件测量结果数据

    直接从第三方软件窗口显示画面把数据抓取出来生成报告,然后传入MES系统,请各位师傅提供一下方案与经验 非常感谢
    发表于 12-21 11:50

    头文件中包含第三方文件

    macrocmake如果源文件(例如 CPP)中包含第三方头文件,但是头文件(例如 hpp)中不包含该第三方文件头,采用 PRIVATE。如果源文件和头文件中都包含该第三方文件头,采用 PUBLIC
    发表于 08-18 08:10

    labview 控制第三方软件界面控件的方式

    labview 控制第三方软件界面控件等,如操控烧录软件等除了模拟鼠标和键盘来实现之后,还可以考虑另外一方式,使用窗口句柄来直接操作程序如下面图片实例,操作串口助手,修改串口和波特
    发表于 11-16 16:00

    如何借助第三方库函数完成一个综合程序设计

    通过学习opencv图像库编程,了解如何借助第三方库函数完成一个综合程序设计。
    发表于 12-23 08:11

    鸿蒙开源第三方组件资料合集

    被开发者使用优化,能够提升应用的丰富性和可操作性。组件效果展示组件中可以通过操作图片、裁切框、按钮,最终实现在图片中裁切部分区域并进行显示的效果,组件的运行效果如图1所示。3、鸿蒙开源第三方组件
    发表于 03-23 09:53