Linux命令行生成随机密码的方法有哪些

Linux命令行生成随机密码的方法有哪些,第1张

生成一个随机密码

对于下面的任何一种方法,你可以通过简单的修改来生成特定长度的密码,或者只使用其输出结果的前N位。希望你正在使用一些类似于LastPass的密码管理器,这样你就不用自己记住这些随机生成的密码了。

1. 这种方法使用SHA算法来加密日期,并输出结果的前32个字符:

Shell

1

date +%s | sha256sum | base64 | head -c 32 echo

2. 这种方法使用内嵌的/dev/urandom,并过滤掉那些日常不怎么使用的字符。这里也只输出结果的前32个字符:

Shell

1

</dev/urandom tr -dc _A-Z-a-z-0-9 | head -c${1:-32}echo

3. 这种方法使用openssl的随机函数。如果你的系统也许没有安装openssl,你可以尝试其它九种方法或自己安装openssl。

Shell

1

openssl rand -base64 32

4. 这种方法类似于之前的urandom,但它是反向工作的。Bash的功能是非常强大的!

1

tr -cd '[:alnum:]' </dev/urandom | fold -w30 | head -n1

5. 这种方法使用string命令,它从一个文件中输出可打印的字符串:

Shell

1

strings /dev/urandom | grep -o '[[:alnum:]]' | head -n 30 | tr -d '\n'echo

6. 这是使用urandom的一个更简单的版本:

Shell

1

</dev/urandom tr -dc _A-Z-a-z-0-9 | head -c6

7. 这种方法使用非常有用的dd命令:

Shell

1

dd if=/dev/urandom bs=1 count=32 2>/dev/null | base64 -w 0 | rev | cut -b 2- | rev

8. 你甚至可以生成一个只用左手便可以输入的密码:

Shell

1

</dev/urandom tr -dc '12345!@#$%qwertQWERTasdfgASDFGzxcvbZXCVB' | head -c8echo ""

9. 如果每次都使用上述某种方法,那更好的办法是将它保存为函数。如果这样做了,那么在首次运行命令之后,你便可以在任何时间只使用randpw就可以生成随机密码。或许你可以把它保存到你的~/.bashrc文件里面。

Shell

1

randpw(){ </dev/urandom tr -dc _A-Z-a-z-0-9 | head -c${1:-16}echo}

10. 最后这种生成随机密码的方法是最简单的。它同样也可以在安装了Cygwin的Windows下面运行。在Mac OS X下或许也可以运行。我敢肯定会有人抱怨这种方法生成的密码没有其它方法来的随机。但实际上如果你使用它生成的全部字符串作为密码,那这个密码就足够随机了。

Shell

1

date | md5sum

是的,这种方法也极其好记。

crypt是个密码加密函数,它是基於DataEncryptionStandard(DES)演算法。

crypt基本上是Onewayencryption,因此它只适用於密码的使用,不适合於资料加密。

char*crypt(constchar*key,constchar*salt)

key是使用者的密码。salt是两个字,每个字可从[a-zA-Z0-9./]中选出来,因此同一密码增加了4096种可能性。透过使用key中每个字的低七位元,取得56-bit关键字,这56-bIT关键字被用来加密成一组字,这组字有13个可显示的ASCII字,包含开头两个salt。

crypt在您有自行管理使用者的场合时使用,例如会员网站、BBS等等。

范例一:crypt_word.c

#include

#include

#include

voidmain(intargc,char**argv)

{

if(argc!=3)exIT(0)

printf("%sn",crypt(argv[1],argv[2]))

}

编译

gcc-ocrypt_wordcrypt.c-lcrypt

检验

请先看您的/etc/passwd,找一个您自己的帐号,看前面两个字,那是您自己的salt。接下来输入:

./crypt_wordyour_passwordsalt

看看它们是否相同(应该要相同,除非您加了cryptplugin或使用不同的crypt

function,例如shadow、pam,这种状况下,加密字是不同的),另外检验看看他们是否为13个字。

您也可以利用Apache上所附的htpasswd来产生加密字做为验证。

1. 使用命令 pwgen 来生成一个长度为 10 个字符的独特的随机密码。假如你还没有安装 pwgen,请使用 Apt 或 YUM 等包管理器来安装它。

$ pwgen 101

生成一个独特的随机密码

一口气生成若干组长度为 50 个字符的唯一的随机密码!

$ pwgen 50

生成多组随机密码

2. 你还可以使用 makepasswd 来每次生成一个给定长度的独特的随机密码。在你把玩 makepasswd 命令之前,请确保你已经安装了它。如若没有安装它,试试使用 Apt 或 YUM 包管理器来安装 makepasswd这个软件包。

生成一个长度为 10 个字符的随机密码。该命令产生的密码的长度默认为 10。

$ makepasswd

使用 makepasswd 生成独特的密码

生成一个长度为 50 个字符的随机密码。

$ makepasswd --char50

生成长度为 50 的密码

生成 7 个长度为 20 个字符的随机密码。

$ makepasswd --char20--count 7

3. 使用带“盐”的 Crypt(注:这里应该指的是一个函数,可以参考这里 ) 来加密一个密码。提供手动或自动添加 “盐”。

对于那些不清楚 盐 的意义的人,这里的 “盐” 指的是一个随机数据,它作为密码生成函数的一个额外的输入, 目的是保护密码免受词典攻击。

在执行下面的 *** 作前,请确保你已经安装了 mkpasswd。

下面的命令将带 “盐” 加密一个密码。“盐” 的值是随机自动生成的。所以每次你运行下面的命令时,都将产生不同的输出,因为它每次接受了随机取值的 “盐”。

$ mkpasswd tecmint

使用 Crypt 来加密密码

现在让我们来手动定义 “盐” 的值。每次它将产生相同的结果。请注意你可以输入任何你想输入的值来作为 “盐” 的值。

$ mkpasswd tecmint -s tt

带“盐”加密密码

另外, mkpasswd 还是交互式的,假如你在命令中没有提供密码,它将主动询问你来输入密码。

4. 使用 aes-256-cbc 加密算法并使用带“盐”的密码(如 “tecmint”) 加密一个字符串(如 “Tecmint-is-a-Linux-Community”)。

# echo Tecmint-is-a-Linux-Community | openssl enc -aes-256-cbc -a -salt -pass pass:tecmint

在 Linux 中加密一个字符串

在上面例子中, echo 命令的输出通过管道传递给了 openssl 命令,使得该输出通过加密编码方式(enc:Encoding with Cipher ) 所加密,这个过程中使用了 aes-256-cbc 加密算法,并附带了密码 (tecmint) 和 “盐” 。

5. 使用 openssl 命令的 -aes-256-cbc 解密选项来解密上面的字符串。

# echo U2FsdGVkX18Zgoc+dfAdpIK58JbcEYFdJBPMINU91DKPeVVrU2k9oXWsgpvpdO/Z | openssl enc -aes-256-cbc -a -d -salt -pass pass:tecmint

在 Linux 中解密字符串

现在就是这些内容了。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7386622.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-05
下一篇 2023-04-05

发表评论

登录后才能评论

评论列表(0条)

保存