你如何生成密码?

时间:2008-09-19 12:13:09

标签: random passwords ascii character passphrase

如何生成密码?

  • 随机字符?
  • 密码短语?
  • High Ascii?

这样的东西?

cat /dev/urandom | strings

43 个答案:

答案 0 :(得分:90)

Mac OS X的“Keychain Access”应用程序可让您访问不错的OS X密码生成器。单击命令-N并单击键图标。您可以选择密码样式(令人难忘,数字,字母数字,随机,FIPS-181)并选择长度。它还会警告您密码不足。

答案 1 :(得分:21)

使用此&砰的一声:)

cat /dev/urandom | tr -dc 'a-zA-Z0-9-!@#$%^&*()_+~' | fold -w 10 | head -n 1

更改头数以生成密码数。

答案 2 :(得分:12)

用于生成密码的简短python脚本,最初来自python cookbook。

#!/usr/bin/env python

from random import choice
import getopt
import string
import sys

def GenPasswd():
    chars = string.letters + string.digits
    for i in range(8):
        newpasswd = newpasswd + choice(chars)
    return newpasswd

def GenPasswd2(length=8, chars=string.letters + string.digits):
    return ''.join([choice(chars) for i in range(length)])

class Options(object):
    pass

def main(argv):
    (optionList,args) = getopt.getopt(argv[1:],"r:l:",["repeat=","length="])

    options = Options()
    options.repeat = 1
    options.length = 8
    for (key,value) in optionList:
        if key == "-r" or key == "--repeat":
            options.repeat = int(value)
        elif key == "-l" or key == "--length":
            options.length = int(value)

    for i in xrange(options.repeat):
        print GenPasswd2(options.length)

if __name__ == "__main__":
    sys.exit(main(sys.argv))

答案 3 :(得分:8)

开源Keepass工具具有一些出色的密码生成功能,包括增强的随机化功能。

答案 4 :(得分:6)

我使用password safe来生成并存储我的所有密码,这样您就不必记住超强密码(除了解锁保险箱的密码之外)。

答案 5 :(得分:5)

您的建议略有不同:

head -c 32 /dev/random | base64

或者,您可以修剪尾随=并使用echo获取换行符:

echo $(head -c 32 /dev/random | base64 | head -c 32)

为您提供更可预测的输出长度密码,同时仍确保只有可打印的字符。

答案 6 :(得分:4)

apg中的算法非常酷。但我主要使用我自己定义的列表中的随机字符。它主要是数字,大写和小写字母以及一些标点符号。我已经消除了很容易被误认为是'1','l','I','O','0'等其他角色的字符。

答案 7 :(得分:4)

标准的UNIX实用程序名为pwgen。 几乎可用于任何unix发行版。

答案 8 :(得分:4)

我不喜欢随机字符密码。他们很难记住。

一般来说,我的密码根据信息对我的重要程度而分为几层。

我最安全的密码往往使用旧的BBS随机生成密码的组合,我太年轻和愚蠢知道如何更改和记忆。将其中的一些与自由使用shift键一起使用效果很好。如果我不使用那些我更好地找到密码短语。也许是我喜欢的一本书中的一个短语,再一次用一些混合的案例和特殊的符号来表达它。通常我会使用一个以上的短语,或一个短语中的几个单词,与另一个短语连接起来。

在低优先级网站上,我的密码很短,通常是一些熟悉的令牌的组合。

我遇到的最大问题是工作,我们需要每30天更改一次密码,不能重复密码。我只是喜欢其他人,提出密码并附加一个不断增加的索引到最后。像这样的密码规则是荒谬的。

答案 9 :(得分:4)

我认为这在很大程度上取决于您要使用密码的方式以及数据的敏感程度。如果我们需要为客户端生成一个有点安全的密码,我们通常会使用一个易于记忆的句子,并使用每个单词的前几个字母并添加一个数字。像'在stackoverflow上使用的最高机密密码'=> 'tspfuos8'。

然而,大多数情况下,我在Linux上使用'pwgen'实用程序来创建密码,您可以指定复杂性和长度,因此它非常灵活。

答案 10 :(得分:4)

对于网站,我使用SuperGenPass,它使用哈希函数(基于MD5)从主密码和域名派生特定于站点的密码。无需在任何地方存储该密码(SuperGenPass本身就是一个书签,完全是客户端),只需记住您的主密码。

答案 11 :(得分:3)

我使用KeePass生成复杂的密码。

答案 12 :(得分:3)

我使用https://www.grc.com/passwords.htm为WPA密钥之类的东西生成长密码字符串。如果你必须实现某种注册站点,你也可以使用它(通过screenscraping)为身份验证密码哈希创建salt。

答案 13 :(得分:3)

选择一个强大的主密码,然后使用cryptohash(masterpasword + sitename)为每个站点生成密码。如果您的站点B的密码落入坏人之手(例如由于邪恶的管理员,wlan嗅探或网站泄露),您将不会丢失站点A的密码,但您只需要记住一个密码。

答案 14 :(得分:3)

在某些情况下,我使用Perl的Crypt :: PassGen模块,该模块在单词语料库上使用马尔可夫链分析(例如,在任何合理的Unix系统上使用/ usr / share / dict / words)。这使它能够生成合理可读的密码,从而记住。

也就是说,在$ work,我们正在转向硬件挑战/响应令牌机制。

答案 15 :(得分:2)

嗯,我的技巧是使用我喜欢的歌词的第一个字母。需要一个例子: 在梦中的每一个夜晚,我都能看到你,我感觉到你......

给我:

  

enimdisyify

......还有一些内容,例如i = 1,o = 0等...

  

en1md1sy1fy

...大写?始终重视自己:)

最后的密码是......

  

en1Md1sy1fy

答案 16 :(得分:2)

我最近使用了一种不常见的密码生成方法。他们不需要超强,随机密码太难记住了。我的申请在北美拥有庞大的城市表。为了生成密码,我生成了一个随机数,抓住了一个randon城市,并添加了另一个随机数。

boston9934

数字的长度是随机的(如果它们是附加的,前置的,或两者都是),所以它不容易暴力。

答案 17 :(得分:2)

Joel Spolsky写了一篇简短的文章:Password management finally possible

  

......终于有了一个很好的方法   管理所有密码。这个系统   无论你有多少台计算机都可以工作   经常使用;它适用于Mac,   Windows和Linux;它是安全的;它   不会将您的密码暴露给任何人   互联网网站(无论你是否   相信它);它产生高度安全,   每个人的随机密码   网站,一旦你很容易使用   拥有一切,它维持一个   自动备份您的密码文件   在线,它是免费的。

他建议使用DropBoxPasswordSafePassword Gorilla

答案 18 :(得分:2)

密码:

$ gpg --gen-random 1 20 | gpg --enarmor | sed -n 5p

密码短语:

http://en.wikipedia.org/wiki/Diceware

答案 19 :(得分:2)

大多数情况下,我输入dd if=/dev/urandom bs=6 count=1 | mimencode并将结果保存在密码保险箱中。

答案 20 :(得分:2)

import random

length = 12
charset = "abcdefghijklmnopqrstuvwxyz0123456789"

password = ""
for i in range(0, length):
    token += random.choice(charset)

print password

答案 21 :(得分:2)

在阅读并尝试了一些很好的答案后,我仍然在寻找一种易于调整并使用非常常见的Linux工具和资源的生成技术。

我真的很喜欢gpg --gen-random答案,但感觉有点笨拙?

我在进一步搜索后找到了这个宝石

echo $(</dev/urandom tr -dc A-Za-z0-9 | head -c8)

答案 22 :(得分:1)

我使用Perl程序生成随机可打印的ASCII字符,然后调整脚本,如果有额外的规则来帮助我生成更“安全”的密码。我可以将密码保存在便利贴上,然后在一两天后将其销毁;我的手指会记住它,我的密码将是完全不可能的。

这是我的主要登录密码,我每天都在使用,实际上我每天都会多次坐下来解锁屏幕。这样可以很容易地快速记忆。显然,其他情况下的密码必须使用不同的机制。

答案 23 :(得分:1)

Firefox-addon Password Hasher非常适合生成密码:Password Hasher

该网站还提供了在线替代插件: Online Password Hasher

答案 24 :(得分:1)

Password Monkey,iGoogle小部件!

答案 25 :(得分:1)

在Mac上我使用RPG

答案 26 :(得分:1)

在PHP中,通过从ASCII表生成随机字符串。见Generating (pseudo)random alpha-numeric strings

答案 27 :(得分:1)

答案 28 :(得分:1)

我从一个外语句子的首字母开始,有一些约定用于大写一些句子。然后,我在句子的特定部分插入从应用程序或网站名称派生的数字和符号的组合。

这个方案为每个应用程序生成一个唯一的密码,每次我可以在我脑海中重新导出而没有任何问题(所以没有记忆),并且它的任何部分都没有机会出现在字典中。

答案 29 :(得分:1)

您必须编写额外的规则来检查您的密码是否适用于您为其编写的系统。某些系统具有“最少两位数和两位大写字母”之类的策略,依此类推。当您逐个字符生成密码时,请根据需要保留数字/字母/大写字母的计数,并将密码生成包装在do ...中,这将重复生成密码,直到(digitCount&gt; 1&amp;&amp; alphaCount&gt; 4&amp;&amp; upperCount&gt; 1),或其他。

答案 30 :(得分:0)

我通常使用密码安全来生成随机密码。对于密码,我实际上希望能够在没有密码安全的情况下记住,我通常会使用一个单词和一个数字,然后交换字符

所以你说了一句话。

棒球

和一个数字

24681357

您将获得

的密码

b2a4s6e8b1a3l5l7

它看起来很随机,并且很难用暴力来实现。此外,大部分时间输入都很容易。您只需键入单词,然后将光标移回第二个字符,然后键入数字,并在每个字符之间按右光标键。这不仅使键入更容易,而且还使键盘记录器更难记录您实际键入的内容。

答案 31 :(得分:0)

我使用了自己写的几个Perl脚本,available on Github

gen-password生成7bp4ssi02d4i之类的密码,并带有指定长度和字符集的选项。 (就我的银行所知,这是我母亲的婚前姓名。)

gen-passphrase使用受this XKCD cartoon启发的词典单词生成porcine volume smiled insert等随机密码短语。

默认情况下,两者都会从/dev/urandom获取随机数据,但可以告诉他们使用/dev/random

我将密码保存在加密数据库中,并且我从不在多个站点上使用相同的密码。其实我记得很少。

答案 32 :(得分:0)

$ echo `cat /etc/dictionaries-common/words | sort --random-sort | head -n 4`
consented upsurges whitewall balderdash

效率很低,但确实有效。

答案 33 :(得分:0)

对于相当重要的东西,我喜欢使用字母和数字的组合,比如“xme7UpOK”。这些可以用这个单行生成:

perl -le 'print map { (a..z,A..Z,0..9)[rand 62] } 1..8'

对于不太重要的东西,我喜欢使用易于输入,发音和记忆的密码,例如“loskubov”或“gobdafol”。这些可以像这样生成:

perl -le '@l=("aeiou", "bdfgjklmnprstv");
          print map {(split "",$l[$_])[rand length $l[$_]]} split "", "10110101"'

其中“10110101”是元音和辅音的模式。

答案 34 :(得分:0)

这个Perl单线程有时会帮助(rand不安全,但通常无关紧要):

$ perl -E"say map { chr(33 + rand(126-33)) } 1..31

示例输出:

ET<2:k|D:!z)nBPMv+yitM8x`r.(WwO

答案 35 :(得分:0)

我使用Crypt::GeneratePassword模块。

答案 36 :(得分:0)

如果您想生成更容易让用户记住的密码,请查看马尔可夫链。 http://en.wikipedia.org/wiki/Markov_chain

此算法可以产生可以发音的无意义单词,因此它们也变得更容易记忆和通过电话进行中继。一个小小的Google-fu可以用几乎任何语言为你提供一些代码示例。

您还需要获取一个好的字典,以过滤掉任何以实际单词形式出现的密码。

当然,这些不是高强度的密码,但是当你需要对某些东西进行一些基本的访问控制并且你不想让你的用户难以记住密码时,它们真的很好。

答案 37 :(得分:0)

makepasswd 使用Linux的/ dev / random功能生成真正的随机密码,强调安全性而不是可发性。它还可以加密命令行上给出的明文密码。

最值得注意的选项是

--crypt-md5     Produce encrypted passwords using the MD5 digest algorithm
--string STRING Use the characters in STRING to generate random passwords

前者可用于自动生成/ etc / passwd,/ etc / cvspasswd等条目。后者可用于在您的密码中添加标点字符(默认情况下,生成的密码仅包含字母数字字符)。

makepasswd最初是用于集中管理Linux Internet Support Cooperative IRC网络的mkircconf程序的一部分。

答案 38 :(得分:0)

Jeff Atwood建议我们都切换到密码短语而不是密码:

答案 39 :(得分:0)

我手动生成非常难以记住的符号,数字以及通常看起来像leetspeak的大写和小写字母的字符串。

示例:

&p0pul4rw3b$ite!

然后我将它们存储为电子邮件草稿,我可以通过网络邮件从任何地方访问。

答案 40 :(得分:0)

对于网站来说,这是一个“秘密”字样,加上我正在注册的网站上令人难忘的内容。

对于其他所有内容,我使用随机生成的密码。

答案 41 :(得分:-1)

中选择一个序列
md5 random_file

答案 42 :(得分:-2)

<?php
    print md5(rand(0, 99999));
?>