首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >任何可读和可读的Python密码生成器?

任何可读和可读的Python密码生成器?
EN

Stack Overflow用户
提问于 2011-03-31 14:29:45
回答 6查看 6.2K关注 0票数 13

它非常简单,可以在Python中生成一个随机字符串(如Python熵显示)。但是,是否有任何Python项目,这些项目将生成既可读又可读的密码字符串?说到可读性,我的意思是不把0和O放在同一个字符串中,等等。我不在乎它是否有最大熵,只是比我可能选择的更好。:)

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2011-03-31 16:08:20

如果你真的只是在寻找“比我能弥补的更好”和“发音更好”的东西,那么也许只需使用random.sample()从辅音-元音-辅音伪音节的列表中提取:

代码语言:javascript
复制
import string
import itertools
import random

initial_consonants = (set(string.ascii_lowercase) - set('aeiou')
                      # remove those easily confused with others
                      - set('qxc')
                      # add some crunchy clusters
                      | set(['bl', 'br', 'cl', 'cr', 'dr', 'fl',
                             'fr', 'gl', 'gr', 'pl', 'pr', 'sk',
                             'sl', 'sm', 'sn', 'sp', 'st', 'str',
                             'sw', 'tr'])
                      )

final_consonants = (set(string.ascii_lowercase) - set('aeiou')
                    # confusable
                    - set('qxcsj')
                    # crunchy clusters
                    | set(['ct', 'ft', 'mp', 'nd', 'ng', 'nk', 'nt',
                           'pt', 'sk', 'sp', 'ss', 'st'])
                    )

vowels = 'aeiou' # we'll keep this simple

# each syllable is consonant-vowel-consonant "pronounceable"
syllables = map(''.join, itertools.product(initial_consonants, 
                                           vowels, 
                                           final_consonants))

# you could trow in number combinations, maybe capitalized versions... 

def gibberish(wordcount, wordlist=syllables):
    return ' '.join(random.sample(wordlist, wordcount))

然后你只需选择适当数量的“单词”:

代码语言:javascript
复制
>>> len(syllables)
5320
>>> gibberish(4)
'nong fromp glosk zunt'
>>> gibberish(5)
'samp nuv fog blew grig'
>>> gibberish(10)
'strot fray hag sting skask stim grun prug spaf mond'

我的统计数据有点模糊,但对于非国安局来说,这可能就足够了。请注意,random.sample()的操作不需要替换。我还应该指出,如果恶意方知道您正在使用此方法,它将容易受到字典攻击。一小点会对此有所帮助。

更新:对于那些感兴趣的人,更新的和可分叉的版本可以在https://github.com/greghaskins/gibberish上获得.

票数 22
EN

Stack Overflow用户

发布于 2015-09-30 18:49:03

我是xkcd密码生成器的超级粉丝。非常可定制的,pip可安装的,和“终极”功能提供了一个很好的方式,为用户提供一个记忆线索,为他们所生成的词集。

票数 4
EN

Stack Overflow用户

发布于 2011-03-31 14:39:14

您可以创建一个简单的马尔可夫文本发生器,然后用一个通用/可读单词列表来训练它。

不久前,我为了好玩写了一个简单的生成器。下面是:

代码语言:javascript
复制
#! /usr/bin/python

from cStringIO import StringIO
from sys import argv
import random

USAGE="usage: ./markov.py input_file"
END_TAG='<end>'
SEPARATOR='\n'

def append(model,token, target):
    if token not in model:
        model[token]=[]
    model[token].append(target)

def add_to_model(model,word, end_tag=END_TAG):
    append(model,'',word[:2])
    for i in xrange(len(word)-2):
        append(model, word[i:i+2],word[i+2])
    append(model,word[-2:],end_tag)

def generate(model, end_tag=END_TAG):
    ret=''
    while True:
        cur=random.choice(model[ret[-2:]])
        if cur==end_tag:
            break
        else:
            ret+=cur
    return ret

if __name__=='__main__':
    if len(argv)>1:
        data=file(argv[1],'r').read().split(SEPARATOR)
        model={}
        for word in data:
            add_to_model(model,word)
        print generate(model)
    else:
        print USAGE
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5501477

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档